如何使用django维护请求之间的oauth会话对象?

时间:2017-07-05 08:15:47

标签: python django oauth

我正在使用Requests-Oauthlib1 workflow在django的oauth 1网站上进行身份验证。

我认为我没有使用一种明显的方法来做到这一点。 我实施它的方式:

/ oauth - 获取请求令牌并返回oauth授权网址

def oauth(request):

    oauth_service = Oauth_service()
    key, secret = oauth_service.obtain_request_token()

    message = oauth_service.get_authorization_url()

    return HttpResponse(message)

/ oauthcomplete - oauth成功重定向到这里,但我现在正在创建一个Oath_Service的新实例,它不会有请求令牌和秘密

def oauth_complete(request):

    oauth_service = Oauth_service()
    verifier = oauth_service.get_verifier(request.build_absolute_uri())

    return HttpResponse("Verified with {}".format(verifier))

oauth_service.py

class Oauth_service:
    '''
    Class used to commuicate with an Oauth magento
    '''

    BASE_URL = 'https://xxx'

    RETRIEVE_REQUEST_TOKEN_PATH = '/oauth/initiate'
    ADMIN_AUTHORIZATION_PATH = '/admin/oauth_authorize'
    RETRIEVE_ACCESS_TOKEN_PATH = '/oauth/token'

    OAUTH_CONSUMER_KEY = 'xxx'
    OAUTH_SECRET_KEY = 'xxx'
    OAUTH_SIGNATURE_METHOD = 'HMAC-SHA1'

    CALLBACK_URL = 'http://127.0.0.1:8000/models/oauth_complete'

    oauth = OAuth1Session(  
            OAUTH_CONSUMER_KEY, 
            client_secret=OAUTH_SECRET_KEY,
            callback_uri=CALLBACK_URL,
        )

    resource_owner_key = ''
    resource_owner_secret = ''
    verifier = ''

    def obtain_request_token(self):
        '''
        step 1 in oauth process
        '''

        request_token_url = self.BASE_URL + self.RETRIEVE_REQUEST_TOKEN_PATH

        headers = {
            'Accept': 'application/json'
        }

        fetch_response = self.oauth.fetch_request_token(request_token_url, verify=False, headers=headers)

        self.resource_owner_key = fetch_response.get('oauth_token')
        self.resource_owner_secret = fetch_response.get('oauth_token_secret')

        return self.resource_owner_key, self.resource_owner_secret

    def get_authorization_url(self):

        base_authorization_url = self.BASE_URL + self.ADMIN_AUTHORIZATION_PATH

        authorization_url = self.oauth.authorization_url(base_authorization_url)

        return 'Please go here and authorize, {}'.format(authorization_url)

    def get_verifier(self, url):
        oauth_response = self.oauth.parse_authorization_response(url)
        verifier = oauth_response.get('oauth_verifier')

        return verifier

感觉就像我使用更新但不会持久的类变量以奇怪的方式这样做。当创建新的服务实例时,这些类变量将不再是它们。

我正在尝试在完整的oauth工作流程中维护OauthSession1实例。

0 个答案:

没有答案