12

当我使用 Google+ 登录开发我的网站时遇到问题:我按照文档告诉我的步骤一步一步进行操作,但我在第 4 步总是失败: https ://developers.google.com/+/web/signin/

结果总是“”immediate_failed“ - 无法自动登录用户”,我只是不知道为什么,谁能帮助我,非常感谢!:-(

4

5 回答 5

21

请注意,在您指向的示例代码中,“immediate_failed”检查被注释掉了。这是故意的,因为用户第一次在页面上遇到登录按钮时,它会失败。

它失败的原因是当页面第一次加载时,甚至在用户按下按钮之前,一个请求被发送到谷歌以确定用户是否已经登录(例如通过谷歌或其他网站)。如果是,则无需再次登录,因此永远不需要显示该按钮。但如果他们尚未登录,您将收到“immediate_failed”响应,并且需要显示(或不清除)按钮。

tl;dr - 不要担心页面第一次加载时会立即失败。这个是正常的。

于 2013-04-07T15:00:22.733 回答
3

作为一种解决方法,我在 gapi.auth.signIn 回调中使用gapi.auth.authorize方法。这是我的代码:

gapi.auth.signIn({
    'callback': gPlusLoginCallback
});

function gPlusLoginCallback(authResult) {
    if (authResult['status']['signed_in']) {
        doSmth(authRes['access_token']); 
    } else if (authResult['error'] == "immediate_failed") {
        gapi.auth.authorize({
            client_id: gplusClientId,
            scope: 'https://www.googleapis.com/auth/plus.login email',
            immediate: true
        }, function (authRes) {
            if (authRes['status']['signed_in']) {
                doSmth(authRes['access_token']);
            }
        });
    }
}

function doSmth(accessToken){
    //Do smth
}
于 2014-12-11T15:36:03.320 回答
2

将此设置“立即:真”更改为假“立即:假”。但是,如果您想进行更复杂的实现,请查看此处的第一个示例https://developers.google.com/api-client-library/javascript/start/start-js。您必须调用 Google 的“gapi.auth.authorize({...”),第一个使用“immediate: true”,第二个使用“immediate: false”。

于 2014-12-17T08:21:20.513 回答
1

这个问题很老,但我最近遇到了这个问题。

就我而言,这是因为我将URI 参数 prompt指定为none. 如果用户以前从未登录过您的平台,我猜 Google 不喜欢这样。

每当我将其更改为consent或完全删除它时,效果都很好。

于 2015-08-10T09:08:35.113 回答
1

在我的情况下,错误是因为明确指定了授权参数 prompt'none'类似于之前的答案。

它通过指定prompt=None或根据官方文档对我有用,您可以跳过此参数。

于 2020-07-23T20:14:54.167 回答