我在单页(javascript)应用程序中使用Google HTML登录按钮,以获取具有Google登录功能的用户的授权对象。这在此详述:https://developers.google.com/+/web/signin/add-button。
我成功收到了如下所示的令牌。由于此令牌在1小时后到期,我需要每30分钟左右刷新一次令牌,直到用户选择退出为止。我试着打电话给:
gapi.auth.authorize({client_id: "90... ...92.apps.googleusercontent.com", scope: "profile email", immediate: true}, function() { console.log( arguments ); } );
但没有运气。我收到相同的令牌,直到它过期,之后我回到空(未登录)令牌。如何在用户不必再次登录的情况下保留/刷新承载令牌?
{
_aa: "1"
access_token: "ya29.1.AA... ...BByHpg"
authuser: "0"
client_id: "90... ...92.apps.googleusercontent.com"
code: "4/Nyj-4sVVcekiDnIgMFh14U7-QdRm.svPMQSODiXMbYKs_1NgQtmX9F90miwI"
cookie_policy: "single_host_origin",
expires_at: "1398341363",
expires_in: "3600",
g_user_cookie_policy: undefined,
id_token: "eyJhbGciOiJ... ...0Es1LI"
issued_at: "1398337763",
num_sessions: "2",
prompt: "none",
response_type: "code token id_token gsession",
scope: "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
session_state: "b92d67080... ...73ae",
state: "",
status: {
google_logged_in: true,
method: "AUTO",
signed_in: true
},
token_type: "Bearer"
}
答案 0 :(得分:2)
使用客户端流程(即Java脚本),您只能获得短期(约1小时)access_token
。如果您希望能够刷新它,则需要refresh_token
,只能使用服务器端流程获取。{/ p>
您可以找到更多信息here。
基本上,它的工作原理如下:
access_token
和code
code
发送到Web服务器上的PHP脚本code
进行交换
access_token
(应该与您刚刚在JavaScript中收到的相同)和refresh_token
refresh_token
存储在某处(在数据库中)
例如)因为它只会发布一次(当用户授予时)
许可)access_token
即将过期时,您可以使用您的
refresh_token
获取另一个有效的access_token
答案 1 :(得分:0)
除了设置计时器之外,您还应该在进行API调用之前检查您的令牌是否仍然有效。既然客户端库返回了promises,并且promises是可链接的,那么你可以非常优雅地完成它。
请参阅我的要点here。