2014-05-02 47 views
3

我的应用程序需要使用Google plus注册用户,然后显示用户的配置文件数据。当用户在Google plus上编辑他们的个人资料并再次访问我的应用程序时,应用程序需要显示更新的数据。因此,应用程序需要存储access_token和refresh_token以供将来使用。我想用google的js api管理所有这些,而不需要任何服务器端的google-api-client。Google oauth使用js api获取refresh_token

问题是我无法使用js api检索refresh_token。我已经安装了一个jsfiddle here。在谷歌加上相关的代码如下:

$('#signInButton').click(function() { 
    attributes = { 
    'accesstype': 'offline', 
    'clientid': "260932337012-1gdbsh3p7oknkjmeaa7m9q7e6nhhgd9c.apps.googleusercontent.com", 
    'scope': 'email profile', 
    'cookiepolicy': 'single_host_origin', 
    'approvalprompt': 'force', 
    'callback': signInCallback 
    }; 

    gapi.auth.signIn(attributes); 
}); 

function signInCallback(authResult) { 
    alert(authResult.request_token); 
} 

设置接入类型离线的不返回refresh_token inspite。我在这里做错了什么?

在此先感谢。

+0

这是没有答案(对不起),但我在类似的小船试图找出一个令人不安的问题与谷歌API休息服务,并得到自己的帮助很少。 – kstubs

+0

@kstubs我找不到纯js的方式。谷歌的文档建议称为一次性代码流。它涉及使用js api获取access_token和代码,然后使用服务器端谷歌库来交换代码以获取refresh_token。如果你使用的是ruby,那么下面的[code](https://github.com/notalex/g_plus)应该是。或者,您也可以逐字阅读Google的文档[此处](https://developers.google.com/+/web/signin/server-side-flow)。 – Alex

+0

谢谢亚历克斯。这是一种可能性(有点)不完全是我今天想要完成的。祝你好运! – kstubs

回答

0

使用基于javascript浏览器的应用程序纯粹使用客户端流程来获取刷新令牌是不可能的。当使用OAuth 2.0的授权类型implicit时,这是一项安全功能。

刷新令牌仅适用于服务器端或混合流。

使用javascript只需要您再次登录该用户,或者如果他们还没有退出,则可以使用'immediate': true参数在幕后对其进行身份验证,即不向他们显示另一个UI弹出窗口。

相关问题