我正在使用Flask&Oauth 2对系统中的用户进行身份验证。用Google登录很好,但是如果我让用户长时间登录,logout就会出现这个错误。在
{
"error": "invalid_token",
"error_description": "Token expired or revoked"
}
我不熟悉烧瓶和web开发,不明白为什么会发生这种情况。如果我再次尝试登录,它会显示用户已连接。在
我的登录按钮HTML
^{pr2}$我的断开连接方法:代码跳转到400错误
# Google Sign out method
@app.route('/gdisconnect')
def gdisconnect():
access_token = login_session.get('access_token')
if access_token is None:
print 'Access Token is None'
response = make_response(
json.dumps('Current user not connected.'), 401
)
response.headers['Content-Type'] = 'application/json'
return response
print 'In gdisconnect access token is %s' % access_token
print 'User name is: '
print login_session['username']
url = 'https://accounts.google.com/o/oauth2/revoke?token=%s' % login_session['access_token']
print url
h = httplib2.Http()
result = h.request(url, 'GET')[0]
print 'result is '
print result
if result['status'] == '200':
del login_session['access_token']
del login_session['gplus_id']
del login_session['username']
del login_session['email']
del login_session['picture']
response = make_response(json.dumps('Successfully disconnected.'), 200)
response.headers['Content-Type'] = 'application/json'
return response
else:
response = make_response(
json.dumps('Failed to revoke token for given user.',
400)
)
response.headers['Content-Type'] = 'application/json'
return response
您的OAuth访问令牌已过期。您不需要撤消过期的访问令牌。在
解决方案是处理访问令牌的}值。注意:此端点还将返回过期令牌的错误,因此在创建或刷新时调用它。在
exp
(expires at)值。如果令牌已过期,请将其从用户会话中删除。您的代码可以在创建或刷新令牌时保存此值,也可以调用Google端点:https://www.googleapis.com/oauth2/v3/tokeninfo
以获取有关令牌的信息,其中包括exp
和{另一个选择是继续调用revoke,但是如果发生错误,请检查令牌是否已过期。如果为true,则忽略错误,从会话中删除令牌并继续,而不报告问题。在
如果确实要终止客户机的OAuth会话,可以撤消刷新令牌(通常不会过期)。这将吊销所有访问令牌。在
相关问题 更多 >
编程相关推荐