我是developign api(javascript),passport-google-oauth2
我碰到了砖墙。
我找到了许多“基本指南”并遵循了它们...
添加策略: onst myconst= require('../myconst'); const GoogleStrategy = require('passport-google-oauth2').Strategy;
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);
});
}
);
然后,我将其包含在护照中:
// 护照.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”(本地主机:8000/api/v1.1/objects1)尝试了它并且只重定向了 - 即使我用谷歌登录,下一个请求我将再次被重定向到相同的路由以进行自动复制。我真的很困惑,真的不知道如何解决它了。你能指出我,这里有什么问题吗?我哪里做错了?