无法自动登录用户 - immediate_failed

12

在使用 Google+ 登录开发我的网站时,我遇到了一个问题:

我按照文档中的步骤操作,但总是在第四步失败:

https://developers.google.com/+/web/signin/

结果总是出现“立即登录失败 - 无法自动登录用户”。我不知道原因是什么,有人能帮我吗?非常感谢!:-(


你能否请提供你正在使用的代码? - Hugo Dozois
5个回答

22
注意,你所指出的样本代码中,“immediate_failed”检查是被注释掉的。这是有意为之的,因为当用户第一次在页面上遇到“登录”按钮时,它会失败。
它失败的原因是,当页面首次加载时,在用户甚至按下按钮之前,会向Google发送请求,以确定用户是否已经登录(通过Google或其他网站)。如果他们已经登录 - 就没有必要再次登录,因此按钮不需要显示。但是如果他们还没有登录,则会收到“immediate_failed”响应,并且需要显示(或不清除)该按钮。
简而言之 - 不用担心页面首次加载时出现“immediate_failed”。这是正常情况。

这在Javascript快速入门页面上展示了一个工作示例。 - LondonRob

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
}

2

1

这个问题虽然旧,但我最近也遇到了这个问题。

在我的情况下,是因为我将URI参数 prompt 指定为none。我猜测如果用户以前从未登录过您的平台,Google可能不喜欢这样做。

每当我将其更改为consent或完全删除它时,它就可以正常工作。


1
在我的情况下,错误是因为明确指定了授权参数prompt'none',类似于之前的答案。
通过指定prompt=None或根据官方文档,您可以跳过此参数,对我有效。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接