【发布时间】:2021-04-20 22:56:14
【问题描述】:
我正在尝试让用户使用 Passport 持久登录,实际上我可以登录我的应用程序, 但是当我尝试使用 req.user 保持登录时,在客户端控制台中它返回我 html 代码,在 Postman 控制台中它返回 CastError: Cast to ObjectId failed for value "{ _id: 'me', active:模型“user”的路径“_id”处的 true }”。
我多次使用本地护照,但这是我第一次将它与 mongoAtlas 数据库一起使用,我不知道这是否有意义,但我提到了它
我的护照配置:
passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser((id, done) =>
User.findById(id)
.then((user) => done(null, user)) // req.user = user
.catch(done)
);
passport.use(
new LocalStrategy(
{
usernameField: "email",
passwordField: "password",
}, function(email, password, done){
User.findOne({ email })
.then(user => {
if(!user) return done(null, false)
user.comparePassword(password, (err, isMatch) => {
if(err) throw err;
if(!isMatch) return done(null, false);
return done(null, user)
})
})
.catch(done);
}
)
)
路由和控制器:
router.post("/login",passport.authenticate("local"), UserController.login)
router.post("/logout", UserController.logout)
router.get("/me", UserController.check) // <-----route to persist
//----------------Controllers-----------------------------
login(req, res, next){
console.log(req.user);
res.send(req.user)
},
logout(req, res, next){
req.logOut()
res.sendStatus(200)
},
check(req, res, next){
if(req.user)return res.send(req.user)
res.sendStatus(401)
}
Github 仓库:https://github.com/seriann/writeYourTabs
【问题讨论】:
-
如果您的问题没有解决,请留言,如果我的回答是真的,请采纳,谢谢
标签: javascript node.js mongodb passport.js passport-local