Passport Js自定义回调函数未调用下一个中间件

问题描述

我正在尝试使用护照js中的自定义回调对用户进行身份验证。我已经根据护照文件写了代码

router.post("/signin/email",function (req,res,next) {
passport.authenticate("email-local",function (err,user,info) {
    if (err) {
        return res.send("err");
    }
    if (!user) {
        return res.send(info);
    }
    req.logIn(user,function (err) {
        if (err) {
            return res.send(err);
        }
        next(user);
    });
    })(req,next),UsersController.getToken;
});

我想将用户传递给下一个中间件,即UsersController.getToken,但是没有被传递。我该如何解决这个问题?

解决方法

在调用登录后,Passport会将用户数据添加到req.user中,因此您不需要将其传递给next。 我建议将req.logIn调用简化为以下内容:

return req.logIn(user,next)

然后在UsersController.getToken中间件中,您可以通过req对象访问用户数据。