我正在使用passport-google-oauth认证谷歌登录。几乎所有事情都正常工作,但是当我从failureRedirect文件中返回错误时,即return done(new Error('Sorry! Your email id is not found. Please contact to Admin.'));时,return done(new Error('Sorry! Your email id is not found. Please contact to Admin.'));从未调用过
以身作则。请通过以下代码:-
config/google.js
module.exports = (jwt, app, passport) => {
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
const User = require('../../models/user.model');
passport.use(new GoogleStrategy({
clientID: "xxxxxxxxxxxxxxxxxxxxxx",
clientSecret: "xxxxxxxxxxxxxxx",
callbackURL: "http://localhost:3000/api/user/google/callback"
},
function (accessToken, refreshToken, profile, done) {
User.findOne({
email: profile.emails[0].value,
isActive: true
}, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(new Error('Sorry! Your email id is not found. Please contact to Admin.'));
} else {
return done(err, user);
}
});
}
));
return passport;
} server.js
........
const passportGoogle = require('./server/config/auth/google')(jwt, app, passport);
const userRoute = require('./server/routes/user.route')(jwt, app, passportGoogle);
..........user.route.js
import express from 'express';
const router = express.Router();
import User from '../models/user.model';
import UserCtrl from '../controllers/user.controller';
module.exports = (jwt, app, passportGoogle) => {
/* GET api listing. */
router.get('/', (req, res) => {
UserCtrl.getUsers({})
.exec((err, users) => {
if (err)
return next(err);
res.json(users)
})
});
router.get('/google',
passportGoogle.authenticate('google', { scope: ['profile', 'email'] }));
router.get('/google/callback',
passportGoogle.authenticate('google', { failureRedirect: '/session/login' }),
//HERE : failureRedirect: '/session/login' :- it never called
function (req, res) {
console.log('req.user', req.user)
// Successful authentication, redirect home.
res.redirect('/dashboard');
});
return router;
}发布于 2018-07-29 08:45:54
我只是路过,看到你的问题没有答案,我想如果你想在谷歌护照策略中拒绝身份验证,你应该把false作为第二个参数,而不是用户在完成回调。这将触发failureRedirect。
function (accessToken, refreshToken, profile, done) {
User.findOne({
email: profile.emails[0].value,
isActive: true
}, function (err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(new Error('Sorry! Your email id is not found. Please contact to Admin.', false));
// Add False As Second Parameter.
} else {
return done(err, user);
}
});
}
));发布于 2021-12-30 22:17:12
done方法应该有两个参数为null来触发failureRedirect。像这样,完成(null,null)
https://stackoverflow.com/questions/48227500
复制相似问题