我正在使用MongoDB express和passport.js在Node.js中实现基于用户令牌的访问

我通过/ usuarios / auth / login获取用户令牌,我将它放在localStorage中,并在以后的请求中发送私有路由的头文件 . Passport创建了req.user对象(我知道因为在后来的Postman请求中我能够发送添加req.user对象的响应,我也可以在VSCode Debugger中看到它) . 这意味着Passport serializeUser和deserializeUser函数及其策略在我的createToken()函数中正常工作

但是现在我想在用户成功登录时重定向到Handlebarstemplate,我希望能够访问Handlebars中的req.user对象 . 我只是试图将用户obj传递给把手,但它没有用,在成功登录后没有尝试重定向,这是我想知道的第二件事 .

这是我的一段代码:

快速配置:

module.exports.initMiddlewares = (app) => {
  app.engine('.hbs', hbs({
    defaultLayout: 'default',
    extname: 'hbs'
}));

app.set('view engine', '.hbs');
app.use(express.static("views"));

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(session({
    secret:config.secretSession,
    store:mongoStore
}));
app.use(auth.initialize());
app.use(passport.session());

app.use(expressValidator());
routes(app);//
}

车把路线:

router.get("/login", (req, res) => {//Login view
    res.render('login')
});
router.get("/registro", (req, res) => {//register view
    res.render('registro')
});
router.get("/dashboard", (req, res) => {//Dashboard
    res.render('dashboard', { usuario: req.user })//here req.user is undefined and in hbs template user attributes are blank
});

用户控制器中的登录功能 . 返回令牌和消息,然后通过护照创建req.user

login: (req, res, next) => {
    req.sanitize('email').trim();
    req.sanitize('password').trim();
    auth.login(req, res, next);
    req.getValidationResult()
        .then(result => {
            if (!result.isEmpty()) {
                return res.status(422).send({errores: result.useFirstErrorOnly().array()});
            }

            Usuario.findOne({email: req.body.email}, (err, usuario) => {
                if (err) return res.status(500).send({error: `Error del servidor ${err}`});
                if (!usuario) return res.status(404).send({error: "El usuario no existe"});
                if (Usuario.isPassword(req.body.password, usuario.password)) {
                    res.status(200).send({
                        message: "Te has logueado correctamente",
                        token: auth.createToken(usuario) //This works fine
                    })
                } else {
                    return res.status(404).send({error: "Contraseña incorrecta"})
                }
            });


        })

},

用户路线:

router.get("/", auth.authenticate(),(req, res,next) => {//This is route for authenticated users. In postman works fine when I set the token in headers
    controladorUsuario.getUsuarios(req, res);        

});
router.post("/auth/signup", (req, res) => {//new user (register)
     controladorUsuario.signup(req, res);
});
router.post("/auth/login", (req, res) => {//Login
     controladorUsuario.login(req, res);
});

验证护照中间件,导出名为auth.js的文件:

module.exports = {
     authenticate: () => { //Función de autenticación
        return passport.authenticate("jwt", config.jwtSession);//session is set to false in config
    }
 }

controladorUsuario.getUsuarios(req,res)函数,由GET / usuarios /调用:

getUsuarios: (req, res) => {
    Usuario.find({}, (err, usuarios) => {
        if (err) return res.status(500).send({error: `Error del servidor ${err}`});
        if (!usuarios) return res.status(404).send({error: `No existen usuarios`});
        res.status(200).send({usuarios, usuario:req.user})//This works fine and send back the req.user
    });
},

登录后,我可以在我的API中的响应中发送req.user对象(如果创建了req.user,只需执行此操作):我必须做什么才能将其传递给Handlebars?我需要做什么才能重定向到特定的路径?

AJAX请求适用于标头中的标记 .

非常感谢!