Как использовать токен в аутентификации токена Google

Я разработал API (JavaScript) с passport-google-oauth2 и я ударил кирпичную стену.

Я нашел много "основных руководств" и последовал за ними...

добавленная стратегия: onst myconst= require('../myconst'); const GoogleStrategy = require('passport-google-oauth2'). Стратегия;

const config = {
    clientID: myconst.AUTHORIZATION_GOOGLE_CLIENT_ID,
    clientSecret: myconst.AUTHORIZATION_GOOGLE_CLIENT_SECRET,
    callbackURL: myconst.AUTHORIZATION_GOOGLE_CALLBACK,
    passReqToCallback: true
}
module.exports = () => {
    return new GoogleStrategy(
        config,
        (request, accessToken, refreshToken, profile, done) => {
            console.log(`-> I got a. token : ${accessToken}`); // just so I can see it
            process.nextTick( () => {
                return done(null, profile);
            });
        }
    );

Затем я включил его в паспорт:

// passport.js

const passport = require('passport');
const strategyOfGoogle = require('./strategies/strategyOfGoogle');

passport.use(strategyOfGoogle());

passport.serializeUser(function (user, done) {
    console.log(' -> Serializing user');
    done(null, user);
});

passport.deserializeUser(function (user, done) {
    console.log(' -> Deserializing user');
    done(null, user);
});

exports.registerPassport = (app) => {
    app.use(passport.initialize());
    app.use(passport.session());
};

и в моем главном файле - app.js я добавил:

const session = require('express-session');
const authenticationPassport = require('./authentication/passport.js');
const passport = require('passport');

// some basic initialziation as http server, db, etc. skipped to make this code a bit shorter

authenticationPassport.registerPassport(app);

app.use(session({
    secret: 'cookie_secret'
    , resave: true
    , saveUninitialized: true
}));

var ensureAuthenticated = (req, res, next) => {
    if (req.isAuthenticated()) {
        return next();
    }
    res.redirect('/auth/google');
};


routes.forEach((route) => {
    const code = require(route.path); 
    const router = code(routeConfig);
    app.use(route.uri,
        // #1
        //ensureAuthenticated,
        // #2
        /*(req, res, next) => {
            console.log(` >> Request : ${req.originalUrl}`);
            return next();
        },*/
        // #3
        passport.authenticate('google', {scope: ['profile', 'email']}),
        router);
});

app.get('/auth/google',
    function (req, res, next) {
        next();
    },
    passport.authenticate('google', { scope: ['profile', 'email'] })
);

app.get('/auth/google/callback',
    passport.authenticate('google', {
        failureRedirect: `/api/v${process.env.MY_VERSION}`
    }),
    function (req, res) {
        // Authenticated successfully
        console.log(`Authenticated it! ${req.isAuthenticated()}`); //alwasy gets tru here
        res.redirect(`/api/v${process.env.MY_VERSION}/api-docs/#/`);
    }
);

После всего этого - пробовал № 1 - № 3 вариантов маршрутов, но он всегда перенаправлял меня с каждым запросом /auth/google/callback, Я попробовал это с простым "GET" (localhost:8000/api/v1.1/objects1) и получил только перенаправление - даже если я войду в систему с помощью Google, при следующем запросе я буду перенаправлен снова на тот же маршрут, чтобы autohrize. Я очень запутался и не знаю, как это исправить. Можете ли вы указать мне, в чем здесь проблема? Где я неправ?

0 ответов

Другие вопросы по тегам