我在我的web应用程序中使用passport.js进行身份验证。我遵循这里给出的示例,即以下代码:
app.get('/api/me',
passport.authenticate('bearer', { session: false }),
function(req, res) {
res.json(req.user);
});
现在,问题是function(req, res)
内部的代码只能用正确的access_token调用。如果登录是错误的函数永远不会被调用,它只是返回"未经授权"。有没有一种方法来执行这个函数呢?例如:
app.get('/api/me',
passport.authenticate('bearer', { session: false }),
function(req, res) {
if(req.user){
res.json(req.user);
} else {
res.json({ error: 'whatever' })
}
});
显然不起作用,因为函数永远不会被调用!
这是我的代码的一个馅饼。我基本上希望我的路由器渲染页面,无论如何,即使有错误的凭据。
从Passport的身份验证页面,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);
});
});
);
对你有帮助吗?