该示例建议以下内容:
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
});
哪个工作正常,但我注册了一条路线,该路线的方法如下,因此不起作用。
exports.googleCallback = function(req, res, next) {
passport.authenticate('google', { failureRedirect: '/login' }),
(function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
})(req, res, next);
};
它直接重定向而不称为以下内容:
var GoogleStrategy = require('passport-google-oauth20').Strategy;
passport.use(new GoogleStrategy({
clientID: GOOGLE_CLIENT_ID,
clientSecret: GOOGLE_CLIENT_SECRET,
callbackURL: "http://www.example.com/auth/google/callback"
},
function(accessToken, refreshToken, profile, cb) {
console.log('Log here');
User.findOrCreate({ googleId: profile.id }, function (err, user) {
return cb(err, user);
});
}
));
我有一个console.log
方法,该方法从不打印回叫,而是直接将页面重定向到/
;
答案 0 :(得分:1)
我假设您重写了代码,因此可以使用以下代码:
app.get('/auth/google/callback', googleCallback)
在这种情况下,您可以使用以下事实:Express也支持中间件的 arrays :
exports.googleCallback = [
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
})
]
您的代码与此等效:
exports.googleCallback = function(req, res, next) {
passport.authenticate('google', { failureRedirect: '/login' });
const handler = function(req, res) {
// Successful authentication, redirect home.
res.redirect('/');
};
handler(req, res, next);
};
哪些功能完全不同(但解释了为什么仅发生重定向)。