回调没有被要求护照 - 亚马逊

时间:2017-01-15 17:20:50

标签: node.js express passport.js

我在快速服务器上的路由上有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。护照回调功能永远不会记录到控制台。

2 个答案:

答案 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的帮助,并坚持与我在一起。