我在我的网络应用程序中使用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是我代码中的一个昵称。我基本上都希望我的路由器能够呈现页面,即使使用了错误的凭据。
答案 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);
});
});
);
这对你有帮助吗?