首页 > 解决方案 > 如何使用 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'
    });
}

标签: node.jsexpressauthorizationjwtexpress-jwt

解决方案


如果我理解您的问题,我认为您只需在渲染视图时将一些局部变量传递给您的视图。例如:

res.render('homepage', { profile })

现在在您的homepage模板中,您将拥有一个名为的对象profile,其中包含各种用户数据。有关更多信息,请参阅res.renderExpress 文档


推荐阅读