我需要更改Google+ API和关闭OAuth吗?

时间:2019-02-09 17:19:03

标签: oauth-2.0 google-api passport.js google-plus

我收到了一封来自Google的电子邮件,内容如下:

  

您好Google+开发者

     

以下电子邮件包含您最近使用的Google+ API。注意:它包括Google+ OAuth范围请求,也受Google+关闭的影响。先前发送给活动API调用者的电子邮件不包含有关OAuth请求的信息。最后一封提醒电子邮件将在2月发送给仍处于活动的API或OAuth请求活动的用户。

     

我需要知道什么?

     

2019年3月7日,所有Google+ API和Google+登录将完全关闭。这将是逐步关闭,API调用最早会在2019年1月28日开始间歇性地失败,而Google+作用域的OAuth请求早在2019年2月15日就开始间歇性地失败。

     

我该怎么办?

     

请在2019年3月7日之前更新下面列出的项目,并确保它们不再使用Google+ API或请求Google+ OAuth范围。以下数据显示了您的项目最近调用了哪些Google+ API方法,以及它已请求的Google+ OAuth范围。

     

注意:如果您看到对people.get的呼叫,则可能是由于您在应用程序中使用了Google+登录功能导致的,该功能现已被弃用,并且已被关闭。开发人员应从Google+登录功能迁移到更全面的Google登录身份验证系统。

| Project   | Google+ API Name  | Version | Method or OAuth ScopeA |   
|   A       | plus              | v1      | plus.people.get        |
|   B       | plus              | v1      | plus.people.get        |

我正在使用护照和这个plugin for google,以避免为用户存储密码。但我也需要电子邮件地址。我尝试仅使用email范围,但这没有用,所以这就是为什么我同时使用两个范围。这是一个片段,我如何使用它:

我请求两个范围,这是它的摘录:

const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;

const app = exprress();
auth(passport);
app.use(passport.initialize());
const auth = function (passport) = {
    passport.serializeUser((user, done) => {
        done(null, user);
    });
    passport.deserializeUser((user, done) => {
        done(null, user);
    });
    passport.use(new GoogleStrategy({
            clientID: CLIENT_ID,
            clientSecret: CLIENT_SECRET,
            callbackURL: CALLBACK_URL
        },
        (token, refreshToken, profile, done) => {
            return done(null, {
                profile: profile,
                token: token
            });
        }));
};
app.get('/auth/google', passport.authenticate('google', {
    scope: ['profile', 'email']
}));

所以现在我有些困惑,因为我不使用plus.people.get范围。 即使在此documentation page上,他们也建议使用profileemail。那为什么我要收到电子邮件?

1 个答案:

答案 0 :(得分:2)

问题不在于您使用plus.profile scope ,而是该库使用HTTP 端点来获取plus.people.get个人资料信息。即使您没有使用plus范围,三年前的最佳实践还是使用加号端点来获取配置文件信息。

有一个pull request可以更改使用的端点。我不清楚为什么还没有合并,但是应该很快。

同时,当您创建userProfileURL对象时,也可以在配置的GoogleStrategy属性中指定端点。这样的代码可能看起来像

passport.use(new GoogleStrategy({
        clientID: CLIENT_ID,
        clientSecret: CLIENT_SECRET,
        callbackURL: CALLBACK_URL,
        userProfileURL: 'https://www.googleapis.com/oauth2/v3/userinfo'
    },
    (token, refreshToken, profile, done) => {
        return done(null, {
            profile: profile,
            token: token
        });
    }));

还有another module,它使用OpenID(Google支持)来获取个人资料信息。您可能希望切换到该版本,因为它似乎受支持。