如何使用 cookie-session 和 passport.js 在注册时启动会话?
Posted
技术标签:
【中文标题】如何使用 cookie-session 和 passport.js 在注册时启动会话?【英文标题】:How to initiate session on signup with cookie-session and passport.js? 【发布时间】:2020-11-03 20:49:33 【问题描述】:我有一个/register
路由器用于注册用户。为了简单起见,我现在使用cookie-session
(类似)而不是express-session
。
我被困在我需要在注册时对用户进行身份验证的部分。我对req.sessions.save()
和req.login()
的功能感到困惑。我知道req.login()
是由passport.js 提供的,但我不明白哪个提供req.session 对象。
我是 passport.js 的新手,并且已广泛阅读大量文章、视频和 *** 问题来积累我的知识。老实说,到目前为止,护照文件一直很痛苦。我仍然对注册时的会话启动应该如何工作感到困惑。许多文章跳过了注册部分。因此,我请求帮助。
router.post('/register', (req, res, next) =>
console.log(req.body)
User.findOne(email: req.body.email).then((currentUser) =>
if(currentUser) // already exists
res.render('login')
else // if not, create user in our db
new User(
email: req.body.email
).save().then((newUser) =>
passport.authenticate('local')(req, res, () =>
//>>>> //**This is where I don't know what to do**
req.session.save((err) =>
if (err)
return next(err)
res.redirect('http://localhost:3000')
)
)
);
);
)
【问题讨论】:
【参考方案1】:const express = require("express");
const router = express.Router();
const passport = require("passport");
router.post("/register", (req, res, next) =>
User.findOne( email: req.body.email ).then((currentUser) =>
if (currentUser) // already exists
res.render('login')
else // if not, create user in our db
new User(
email: req.body.email
).save();
);
passport.authenticate("local", function (err, user, info)
if (err)
return res.status(400).json( errors: err );
if (!user)
return res.status(400).json(errors:"No user found.");
// or save User : new User(email: req.body.email).save();
req.login(user, function (err)
if (err)
return res.status(400).json( errors: err );
req.session.save((err) =>
if (err)
return next(err)
res.redirect('http://localhost:3000')
);
return res.status(400).json( success: `logged in $user.id` );
);
)(req, res, next);
);
module.exports = router;
【讨论】:
passport.authenticate()
也调用了req.login()
,所以它是多余的,我认为调用它两次是不对的。【参考方案2】:
passport.authenticate('local')(request, response, () =>
req.session.save((err) =>
if (err)
return next(err)
res.redirect('http://localhost:3000')
)
【讨论】:
虽然这个答案试图解决这个问题,但如果它有一个关于它如何解决问题的描述,那么它会更有用,以便 OP 和其他人可以从中学习。 这不是我在问题中发布的代码吗?我认为这是重定向链接,但在您最初注册时显示unauthorized
。以上是关于如何使用 cookie-session 和 passport.js 在注册时启动会话?的主要内容,如果未能解决你的问题,请参考以下文章
为啥除了 passport.js 还要使用 cookie-session?
Django框架的使用教程--Cookie-Session[五]