def auth_request( self ):
# STEP 1
# note: these parameters need to be sorted alphabetically by key. They are therefore a list of tuples and not a dictionary.
params = [( 'oauth_callback' , self.domain_name[ :-1 ] + self.get_auth_callback()),
( 'oauth_consumer_key' , settings.secrets.CLIENT_ID_TWITTER ),
( 'oauth_nonce' , webapp2_extras.security.generate_random_string( length = 42, pool = webapp2_extras.security.ALPHANUMERIC ).encode( 'utf-8' )),
( 'oauth_signature_method' , "HMAC-SHA1" ),
( 'oauth_timestamp' , str( int( time.time()))),
( 'oauth_version' , "1.0" )]
normalised_url = 'https://api.twitter.com/oauth/request_token/'
oauth_signature = self.auth_sign( normalised_url, params )
params.append(( 'oauth_signature', oauth_signature ))
url_params = enki.libutil.urlencode( params )
result = self.urlfetch_safe( url = normalised_url, payload = url_params, method = urlfetch.POST )
response = self.process_result_as_query_string( result )
# STEP 2
if response.get( 'oauth_callback_confirmed' ) != 'true' :
self.abort( 401 )
return
else:
oauth_token = response.get( 'oauth_token' )
self.session[ 'twitter_oauth_token' ] = oauth_token
self.session[ 'twitter_oauth_token_secret' ] = response.get( 'oauth_token_secret' )
url_redirect_params = enki.libutil.urlencode([( 'oauth_token', oauth_token )])
url_redirect = 'https://api.twitter.com/oauth/authenticate?' + url_redirect_params
self.redirect( url_redirect )
return
评论列表
文章目录