我在快速服务器上的路由上有passport-amazon
策略(为了简洁起见,我已从回调中删除了用户处理代码):
护照在server.js中初始化:
//configure passport
app.use(passport.initialize());
app.use(passport.session());
require('./config/passport')(passport);
护照策略已添加到require('./config/passport')(passport)
:
passport.use(
new AmazonStrategy({
clientID: process.env.AMAZON_CLIENT_ID,
clientSecret: process.env.AMAZON_CLIENT_SECRET,
callbackURL: process.env.AMAZON_CALLBACK_URL
},
(accessToken, refreshToken, profile, done) => {
console.log('in the callback for amazon auth');
//user handling code here
return done(null, user);
);
路线:
routes.get(
'/login',
passport.authenticate(
'amazon',
{
scope: ['profile']
}
),
(req, res) => {
console.log('something happens here');
}
)
身份验证使其成为Amazon并使用回调URL。我在回调网址上的中间件:
function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
return next();
res.redirect('/');
}
正在调用,req.isAuthenticated()
为false
。护照回调功能永远不会记录到控制台。
答案 0 :(得分:1)
您的isLoggedIn
中间件就是错误。您不应该在回调网址中检查身份验证,因为此时还没有user
。
您可以将用户重定向到回调路由中的安全路由,并在该路由上使用isLoggedIn
中间件。
答案 1 :(得分:0)
我使用example code发现了问题。我需要在中间回调路由上进行另一个身份验证调用:
routes.get(
'/amazon/auth/callback',
passport.authenticate('amazon', {failureRedirect: '/'}),
(req, res) => {
console.log("at /amazon/auth/callback");
res.redirect('/highlights');
});
执行护照回调,isLoggedIn方法通过。
感谢Ebrahim Pasbani的帮助,并坚持与我在一起。