为什么Google App Engine OAuth2使用Javascript返回无效凭据

时间:2014-05-11 04:12:46

标签: javascript html google-app-engine web-applications oauth-2.0

我正在构建Google App Engine应用并运行以下代码

<!DOCTYPE html>
<html manifest="cache.appcache">
<head>
    <title>Eat Fresh</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8">
    <script src="scripts/whitelist.js" type="text/javascript"></script>
    <script src="https://apis.google.com/js/client.js?onload=init"></script>
</head>
<body>
</body>

</html>

function init() {
    CLIENT_ID = "my client ID"
    SCOPES = ["https://www.googleapis.com/auth/userinfo.email"]
    gapi.client.load('oauth2', 'v2', signin)
}

function signin() {
    gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: true}, userAuthed)
}

function userAuthed() {
    gapi.client.oauth2.userinfo.get().execute(function(resp) {
    checkEmail(resp)
    })
}

function checkEmail(user) {
    console.log(user)
    var validEmail = (whiteList.indexOf(user.email) !== -1)
    if (!user.code && validEmail) {
        startApp()
    } else {
        displayError(user.email)
    }
}

这是返回

Object {code: 401, message: "Invalid Credentials", data: Array[1], error: Object}

我用Google搜索并用谷歌搜索,无法找到为什么会发生这种情况。上面使用的代码直接来自我的另一个Google App Engine项目,它在那里完美运行。此外,如果我记得,我在项目中收到了类似的消息,我从中获取了此代码,并通过更改https://appengine.google.com/https://console.developers.google.com/project上的设置进行了修复。

我看了看,找不到第一次帮我修好的网页。我对设置的猜测可能完全不正确,但这是我的预感。

1 个答案:

答案 0 :(得分:2)

发生这种情况的原因是因为来自

的访问令牌
gapi.auth.authorize({client_id: CLIENT_ID, scope: SCOPES, immediate: true}, userAuthed)

返回undefined。这是因为该应用无权授权该应用查看Google +帐户数据。更改以下内容

immediate: false

将提示用户授予应用程序权限,从而允许授权访问令牌和其余代码工作。