passportJs持票人策略,无论如何加载页面

时间:2014-07-30 04:32:45

标签: node.js passport.js

我在我的网络应用程序中使用passport.js进行身份验证。我按照here给出的示例,即以下代码:

app.get('/api/me', 
  passport.authenticate('bearer', { session: false }),
  function(req, res) {
    res.json(req.user);
  });

现在,问题是function(req, res)内的代码只能使用正确的access_token进行调用。如果登录错误,则永远不会调用该函数,它只会返回" Unauthorized"。有没有办法执行该功能?例如:

app.get('/api/me', 
  passport.authenticate('bearer', { session: false }),
  function(req, res) {
    if(req.user){
      res.json(req.user);
    } else {
      res.json({ error: 'whatever' })
    }
  });

这显然不起作用,因为函数永远不会被调用!

here是我代码中的一个昵称。我基本上都希望我的路由器能够呈现页面,即使使用了错误的凭据。

1 个答案:

答案 0 :(得分:0)

Passport's authenticate page开始,authenticate方法接受可选的自定义回调函数作为其第三个参数。

我没有试过Bearer策略,但我认为不会有任何不同。 但请记住,如果您使用此回调函数,则必须使用login

自行处理res.logIn()进程

所以

app.get('/api/me', 
    passport.authenticate('bearer', { session: false },
      function(err, user,info) {
         if (err) { return next(err); } // If there's an error the process
         if (!user) { return res.json({ error: 'user not found' }) } // If the user's not found
         req.logIn(user, function(err) { // User exists !
               if (err) { return next(err); }
               return res.json(req.user);
         });
     });
 );

这对你有帮助吗?