有人能给我详细解释一下为什么/profile的路由可以访问user对象吗?我目前正在学习JavaScript和NodeJS,你们的答案将对我的学习有很大的帮助谢谢你们。
app.post('/login',function (req, res) {
let email = req.body.email;
let password = req.body.password;
User.getUserByEmail(email, (err, user) => {
if (err) throw err;
if (!user) {
return res.json({
success: false,
message: "User not found!"
});
}
User.comparePassword(password, user.password, (err, isMatch) => {
if (err) throw err;
if (isMatch) {
var token = jwt.sign(user.toJSON(), config.JWT_SECRET, {
expiresIn: '15m'
});
res.json({
success: true,
token: token,
user: {
id: user._id,
email: user.email
}
});
} else {
return res.json({
success: false,
message: "Password incorrect!"
});
}
})
});
});
app.get('/profile', passport.authenticate('jwt', {
session: false
}), (req, res) => {
res.json({user: req.user});
});发布于 2019-02-28 05:16:40
这是因为您的passport.authenticate()调用将user填充到req。
来自passports.org的:
app.post('/login',
passport.authenticate('local'),
function(req, res) {
// If this function gets called, authentication was successful.
// `req.user` contains the authenticated user.
res.redirect('/users/' + req.user.username);
});除了您的路径和身份验证方法不同之外,您的路由是相同的。
有关详细信息,请参阅文档:http://www.passportjs.org/docs/authenticate/
发布于 2019-02-28 05:16:55
一些背景知识
app.get函数接受一个url和一个或多个回调函数,并以(req, res, next) => {}作为其签名req 对象,它将“传播”到下一个回调next在你的情况下
对response.
passport.authenticate('jwt', {sessions: false})回调来验证用户身份之前执行的,然后将它的值“注入”到req对象中。req将“传播”到下一个回调。这就是为什么当您发送json响应时,它req已经包含了user keyhttps://stackoverflow.com/questions/54914320
复制相似问题