Как отобразить имя пользователя вошедшего в систему пользователя, используя токены JWT - PullRequest
0 голосов
/ 27 февраля 2019

Я использую 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' );


                    },

Index.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!"
                ]
            });
        }
});

Users.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'
    });
}

1 Ответ

0 голосов
/ 28 февраля 2019

Если я понимаю вашу проблему, я думаю, что вам просто нужно передать некоторые локальные переменные вашему представлению при его рендеринге.Например:

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

Теперь в вашем шаблоне homepage у вас будет объект с именем profile, который содержит различные пользовательские данные.См. res.render Экспресс документы для получения дополнительной информации.

...