从google-api-python-client撤消功能

问题描述 投票:1回答:1

我正在使用google-api-python-client的内置revoke方法从django应用程序中创建注销功能,但它似乎不起作用。 这是我的代码。

def google_logout(request, user_id = None):
    storage = Storage(CredentialsModel, 'id', user_id, 'credential')
    credential = storage.get()

    if credential is not None:
        cr_json = credential.to_json()
        credential = credential.new_from_json(cr_json)

        http = httplib2.Http()
        http = credential.authorize(http)

        try:
        # Don't know yet why this is always raising an exception.
            credential.revoke(http)
            storage.delete()
        except TokenRevokeError:
            return HttpResponseBadRequest('Invalid Token.')
    else:
        return redirect('authentication:google_login')

当我使用django 1.4.5时,这是可行的,但是后来我需要升级到1.5.1,现在它不起作用了。 这是django问题吗? 我敢打赌 请帮忙。

PS我知道我可以通过将access_token手动传递到此URL https://accounts.google.com/o/oauth2/revoke?token= {token}来撤消令牌,但是我想使用api中提供的方法。

django google-api google-api-python-client
1个回答
0
投票

即使access_type设置为offline ,你可能无法得到更新权杖回来,如果你收到了在过去的一个刷新令牌,并没有额外发送查询参数approval_prompt设置参数force

这尤其令人沮丧,并且可能在调试吊销期间发生。 由于您可能会经常批准和删除凭据,因此有时Google可能会记住批准并进行授权而无需执行强制批准过程,在这种情况下,您将不会获得客户端API要求撤销的刷新令牌。

© www.soinside.com 2019 - 2024. All rights reserved.