node.js - 如何使用 JWT 令牌显示当前登录用户的用户名
问题描述
我正在使用 Express/Node.js 和 mongoDB。当用户登录/注册时,他们会提供一个JSON Web Token (JWT),并且他们会被重定向到“homepage.hbs”。如何在当前登录用户的主页上显示用户名?
这是我用于登录用户的代码。
Auth.js
$("#login-form").submit(function (event) {
event.preventDefault();
$.ajax({
type: 'POST',
url: '/users/login',
dataType: 'json',
data: {
'user_name': event.target.inputUsername.value,
'password': event.target.inputPassword.value
},
success: function(token){
$(location).attr('href', '/homepage' );
},
索引.js
router.get('/homepage', function(req, res, next) {
try {
var jwtString = req.cookies.Authorization.split(" ");
var profile = verifyJwt(jwtString[1]);
if (profile) {
res.render('homepage');
}
}catch (err) {
res.json({
"status": "error",
"body": [
"Not logged in!"
]
});
}
});
用户.js
router.post('/login', function(req, res, next){
var username = req.body.user_name;
var password = req.body.password;
User.findOne({'user_name': username}, function (err, user) {
if (err)
res.send(err);
if (user) {
if (user.validPassword(password)) {
user.access_token = createJwt({user_name: username});
user.save();
res.cookie('Authorization', 'Bearer ' + user.access_token);
res.json({'success' : 'currentlyloggedIn'});
}
else {
res.status(401).send({
"status": "error",
"body": "Incorrect combination"
});
}
}
else
{
res.status(401).send({
"status": "error",
"body": "Username not found"
});
} }); });
/*Creates a JWT*/
function createJwt(profile) {
return jwt.sign(profile, 'JWT password', {
expiresIn: '5d'
});
}
解决方案
如果我理解您的问题,我认为您只需在渲染视图时将一些局部变量传递给您的视图。例如:
res.render('homepage', { profile })
现在在您的homepage
模板中,您将拥有一个名为的对象profile
,其中包含各种用户数据。有关更多信息,请参阅res.render
Express 文档。
推荐阅读
- c# - 尝试从过程中获取数据时:PL/SQL - 数字或值错误
- css - 引导行大纲
- c++ - 为链接列表中的函数设置参数
- python - 在数据框中搜索同一对(Python)
- c# - 如何使用自定义错误模型返回 BadRequest 响应?网页 API 2
- python - 在没有熊猫的情况下将 sqlalchemy 对象返回到数据库表的最佳方法是什么?
- sql - 获取参考表行的总和
- c++ - Adding a type to an existing template with out it being dropped c++17
- reactjs - (0 , _react.useEffect) 不是 Docker-compose 中 Storybook 的函数
- python - 在 Python 中以日志格式附加环境变量