passport-google-oauth: GooglePlusAPIError: API Legacy People не использовался в проекте - PullRequest
0 голосов
/ 15 марта 2020

Примечание : Это может быть дубликатом некоторых вопросов SO, но прохождение этих ответов не решило эту проблему.

Я пытаюсь интегрировать google-oauth, используя passport-google-oauth согласно passport js do c и пример github .

Столкнувшись с этой ошибкой (ссылка на какую-то ссылку, но ссылка не работает)


GooglePlusAPIError: Legacy People API has not been used in project xxxxxxx before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/legacypeople.googleapis.com/overview?project=xxxxxxxxxx then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.
    at D:\openSource\passport\express-passport-google-oauth-exmple\node_modules\passport-google-oauth20\lib\strategy.js:95:21
    at passBackControl (D:\openSource\passport\express-passport-google-oauth-exmple\node_modules\oauth\lib\oauth2.js:132:9)
    at IncomingMessage.<anonymous> (D:\openSource\passport\express-passport-google-oauth-exmple\node_modules\oauth\lib\oauth2.js:157:7)
    at IncomingMessage.emit (events.js:215:7)
    at endReadableNT (_stream_readable.js:1184:12)
    at processTicksAndRejections (internal/process/task_queues.js:80:21)

Как и в некоторых других ответах по SO, включен API Google+, Google People API и контакт API, но ошибка остается прежней. Я знаю, что Google+ и API Google People на данный момент выведены из эксплуатации.

Дайте мне знать, что именно для работы Google API нужно включить Google Auth. Мне нужно только проверить пользователя и получить профиль basi c во время аутентификации.

Если это не связано с включением API, помогите мне найти ошибку.

Код размещен ниже, и он доступен на примере github

auth. js

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

module.exports = function (passport) {
    passport.serializeUser((user, done) => {
        done(null, user);
    });
    passport.deserializeUser((user, done) => {
        done(null, user);
    });
    passport.use(new GoogleStrategy({
        clientID: "xxxxxxxxxxxx",
        clientSecret: "xxxxxxxxxxxx",
        callbackURL: '/auth/google/callback'
    }, (token, refreshToken, profile, done) => {
        return done(null, {
            profile: profile,
            token: token
        });
    }));
};

сервер. js

const express = require('express'),
    app = express(),
    passport = require('passport'),
    auth = require('./auth'),
    cookieParser = require('cookie-parser'),
    cookieSession = require('cookie-session');

auth(passport);
app.use(passport.initialize());

app.use(cookieSession({
    name: 'session',
    keys: ['SECRECT KEY'],
    maxAge: 24 * 60 * 60 * 1000
}));
app.use(cookieParser());

app.get('/', (req, res) => {
    if (req.session.token) {
        res.cookie('token', req.session.token);
        res.json({
            status: 'session cookie set'
        });
    } else {
        res.cookie('token', '')
        res.json({
            status: 'session cookie not set'
        });
    }
});

app.get('/logout', (req, res) => {
    req.logout();
    req.session = null;
    res.redirect('/');
});

app.get('/auth/google', passport.authenticate('google', {
    scope: ['https://www.googleapis.com/auth/userinfo.profile']
}));

app.get('/auth/google/callback',
    passport.authenticate('google', {
        failureRedirect: '/'
    }),
    (req, res) => {
        console.log(req.user.token);
        req.session.token = req.user.token;
        res.redirect('/');
    }
);

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

1 Ответ

0 голосов
/ 17 марта 2020

Наконец, проблема решена, есть несколько библиотек с похожим именем, то есть passport-google-oauth, passport-google-oauth2 и passport-google-oauth20. Попробовав все 3, passport-google-oauth20 сработало для меня.

passport-google-oauth2 - это URL-адрес github, но это примерно passport-google-oauth20.

...