我正在将新的 Google+登录按钮添加到我的应用程序中,并且在进行经过身份验证的呼叫时遇到了一些问题。我已经包含了文档中描述的 html 和 javascript,并且登录有效。我什至可以看到访问令牌。但是,当我向经过身份验证的端点发出请求时,我会收到“无效凭据”响应。例如我正在尝试:
gapi.client.oauth2.userinfo.get().execute(function(resp){console.log(resp);});
如果我使用常规的 google oauth 方法 (gapi.auth.authorize()),我可以拨打这个电话。这里发生了什么?我究竟做错了什么?
我正在使用 google+ 按钮请求 userinfo.email 和 userinfo.profile 范围。
G+ 登录的 Html:
<span id="signinButton">
<span
class="g-signin"
data-callback="signinCallback"
data-apppackagename="com.mypackage"
data-clientid="myclientID"
data-cookiepolicy="single_host_origin"
data-requestvisibleactions="http://schemas.google.com/AddActivity"
data-scope="https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_only https://www.googleapis.com/auth/plus.login">
包含用于 G+ 登录按钮的 js(就在之前):
(function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/ client:plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
G+ 按钮的回调:
function signinCallback(authResult) {
if (authResult['access_token']) {
signin();
} else if (authResult['error']) {
console.log('There was an error: ' + authResult['error']);
}
}
请求用户资料:
gapi.client.oauth2.userinfo.get().execute(function(resp) {console.log(resp);});
该请求包括带有令牌的授权标头(通过 chrome 开发工具查看)。
更新:
我也尝试在即时模式下使用 gapi.auth.authorize() 。这不起作用并返回了空响应。当我在立即模式设置为 false 的情况下运行它时,我看到了授权提示(再次,在使用 g+ 按钮授权之后)。在此之后,我的授权电话起作用了。下面是我的代码:
gapi.auth.authorize({client_id: 'myClientID', scope: 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/devstorage.read_only',
immediate: mode, response_type: 'token id_token'}, callback);