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

时间:2013-07-12 11:54:11

标签: django google-api google-api-python-client

我正在使用google-api-python-client内置的撤销方法从django app创建一个注销功能,但它似乎无法正常工作。这是我的代码。

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问题吗?我打赌不是。请帮忙。

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

1 个答案:

答案 0 :(得分:0)

即使access_type设置为offline,如果您过去收到刷新令牌并且未另外发送,则可能无法获得刷新令牌查询参数approval_prompt参数设置为force

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