handlersoauth.py 文件源码

python
阅读 30 收藏 0 点赞 0 评论 0

项目:enkiWS 作者: juliettef 项目源码 文件源码
def auth_callback_provider( self ):
        # STEP 3
        oauth_verifier = self.request.get( 'oauth_verifier' )
        params = [( '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_token', self.session.get( 'twitter_oauth_token' )),
                  ( 'oauth_version' , "1.0" )]
        normalised_url = 'https://api.twitter.com/oauth/access_token/'
        oauth_signature = self.auth_sign( normalised_url, params, self.session.get( 'twitter_oauth_token_secret') )
        params.append(( 'oauth_signature', oauth_signature ))
        params.append(( 'oauth_verifier', oauth_verifier ))
        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 )
        oauth_token = response.get( 'oauth_token' )
        oauth_token_secret = response.get('oauth_token_secret')
        user_id = response.get( 'user_id')
        if user_id and oauth_token:
            #get email address if we can
            verify_params = [('include_email', 'true'),
                             ('include_entities','false'),
                             ('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_token', oauth_token ),
                             ('oauth_version', "1.0"),
                             ('skip_status', 'true')]
            verify_oauth_signature = self.auth_sign('https://api.twitter.com/1.1/account/verify_credentials.json', verify_params,oauth_token_secret, method_get=True )
            verify_params.append(('oauth_signature', verify_oauth_signature))
            verify_url_params = enki.libutil.urlencode( verify_params )
            full_url = 'https://api.twitter.com/1.1/account/verify_credentials.json?' + verify_url_params
            verify_credentials_result_json = self.urlfetch_safe( url = full_url, method = urlfetch.GET )
            verify_credentials_result = self.process_result_as_JSON(verify_credentials_result_json)
            response['email'] = verify_credentials_result['email']
            response['email_verified'] = True
            loginInfoSettings = { 'provider_uid': 'user_id',
                                  'email': 'email',
                                  'email_verified': 'email_verified' }
            loginInfo = self.process_login_info( loginInfoSettings, response )
            self.provider_authenticated_callback( loginInfo )
        else:
            self.abort( 401 )
        return
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号