【发布时间】:2022-11-27 14:14:21
【问题描述】:
我是快速会话的新手。它的行为不像我期望的那样,我想知道是否有人可以指出原因。这可能是基本的用户错误。
我正在构建一个应用程序,用于存储 k-9 志愿者搜救队的培训信息。我正在尝试使用 PassportJS 对登录进行身份验证。我通过 Mongo Atlas 存储数据。我处于我只想看到它基本上工作的水平,以便我可以进一步构建它。
这是我设置中间件的方式:
router.use(session({
secret: process.env.SESSION_SECRET,
resave: false,
saveUninitialized: true
}))
(我不确定我是否在滥用 Passport,所以我也会展示我是如何构建它的):
router.use(passport.initialize())
router.use(passport.session())
authUser = async (username, password, done) => {
const returnedUser = await User.findOne({username: username}, (err, user) => {
if (err) {
return err
} else {
return user
}
})
.clone()
if (!returnedUser) {
return done(null, false)
} else if (returnedUser.password != password) {
return done(null, false)
} else {
return done(null, returnedUser)
}
}
passport.use(new LocalStrategy (authUser))
passport.serializeUser( (userObj, done) => {
done(null, userObj)
})
passport.deserializeUser((userObj, done) => {
done (null, userObj )
})
当我登录时,console.log() 会话...
router.post('/signIn', passport.authenticate('local', {
// failureRedirect: 'http://localhost:3000/users/signIn'
failureMessage: 'failure'
}), (req, res) => {
console.log('req.session:', req.session)
res.send('finished')
})
...我在控制台中得到了我所期望的:
req.session: Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true },
passport: {
user: {
_id: new ObjectId("62e5505409d8b098030b70aa"),
username: 'cap1',
password: 'America',
firstName: 'Steve',
lastName: 'Rogers',
email: 'cap@notshield.org',
phoneNumber: 1234567890,
dateCreated: 2022-07-30T15:37:56.079Z,
k9s: [Array],
__v: 0
}
}
}
(我知道我需要加密这个密码,但在我试图理解它的时候我暂时让它可见。)
但是,然后当我测试它以查看它是否仍然存在时......
router.post('/', async (req, res) => {
console.log(req.session)
//check all field on the front end
let postUser = new User({
"username": req.body.username,
// "password": await hasher(req.query.password, 10),
"password": req.body.password,
"firstName": req.body.firstName,
"lastName": req.body.lastName,
"email": req.body.email,
"phoneNumber": req.body.phoneNumber,
"dateCreated": new Date(),
//query must must be formatted like
//&k9s[]=spike&k9s[]=lucey
"k9s": req.query.k9s
})
postNew(postUser, res)
})
...会话在 console.log() 中不包含通行证信息:
Session {
cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }
}
(我意识到在实践中需要通过登录会话来创建新用户是没有意义的。我只是想使用我知道的两个功能来测试它。)
为什么会话不在 http 请求之间保留 Passport JS 信息?
【问题讨论】:
标签: node.js mongodb express passport.js express-session