Javascript 如何在所有视图中保持req.user恒定?
我正在使用PassportJS和Express:Javascript 如何在所有视图中保持req.user恒定?,javascript,express,passport.js,Javascript,Express,Passport.js,我正在使用PassportJS和Express: app.use(passport.initialize()); app.use(passport.session()); passport.use(new LocalStrategy(User.authenticate())); passport.serializeUser(User.serializeUser()); passport.deserializeUser(User.deserializeUser()); app.use(functi
app.use(passport.initialize());
app.use(passport.session());
passport.use(new LocalStrategy(User.authenticate()));
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.use(function(req, res, next){
res.locals.CurrentUser = req.user;
next();
});
app.get('/pics/:id', middleware.isLoggedIn, function(req, res) {
User.find({"_id": req.params.id}, function(err, userProfile) {
if(err) {
console.log("error on profile page: " + err)
} else {
res.render("user-profile", {userProfile: userProfile});
}
})
})
这是我缩短的服务器代码。现在在客户端,我尝试使用res.locals代码,我发现username属性保持不变,但ID不变
<%=CurrentUser.username%>
<%=CurrentUser._id%>
上述代码生成:
肖恩5AEA9A9D66C1A87594F1
当我询问
它产生:
肖恩5aeaafe552984a856080644b
当我询问
如何保持CurrentUser的.u id属性像name一样保持不变?当您对passport使用本地策略时,当您在数据库中找到您的用户时,需要使用函数
req.logIn
。之后,它将在req.user
中持久化,我也在使用passport.authenticate。根据文档:“注意:passport.authenticate()中间件自动调用req.login()。此功能主要用于用户注册时,在此期间可以调用req.login()自动登录新注册的用户。”[这是我的登录路径]app.post(“/login”),passport.authenticate(“本地”,{successRedirect:“/home”,failureRedirect:“/login”}),function(req,res){})我在stackoverflow的帖子上看到,如果您使用本地策略,调用req.login就成了您的责任。我和您有同样的问题。尝试req.login(userProfile,function(err))
紧跟在find
方法之后