отправка веб-токена json с помощью ajax в Node API - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь сделать промежуточное ПО авторизации, используя jsonwebtoken, cookie-parser для установки cookie и jQuery в клиенте.

Для этого я использую промежуточное ПО для проверки авторизации.

вот промежуточное ПО

const jwt = require('jsonwebtoken')

module.exports = (req,res,next)=> {
    try{
        const token = req.headers.authorization.split("=")[1];
        const decodedToken = jwt.verify(token, process.env.JWT_KEY)
        req.userData = decodedToken;
        next();

    } catch(error){
        return res.status(401).json({
            message: "Auth failed"
        })
    }   
}

В моем API я создаю и отправляю токен следующим образом:


                const token = jwt.sign({
                        email: user[0].email,
                        userId: user[0]._id
                    },

                    process.env.JWT_KEY, {
                        expiresIn: "1h"
                    }
                )

                res.cookie('userToken', token)
                res.render('index', {
                    movies: {}, token:token
                });


В клиенте я отправляю обратно на сервер так:

var userToken = document.cookie;
        // console.log(userToken)

        $.ajax({
            url: "/movies/add",
            type: "GET",
            beforeSend: function (xhr, settings) {
                console.log(xhr)
                xhr.setRequestHeader('Authorization', 'Bearer ' + userToken);
            }
        });

Маршрут фильмы / добавления получает запрос, поскольку он печатает «он введен», но не перенаправляет на фильмы / добавления фильмов. Чего мне не хватает?

    router.get('/add', checkAuth, function (req, res, next) {

        console.log('it entered')

        res.render('movies/addMovies', {
            movies: {}
        })


    });

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Я изменил на это:


$.ajax({
            url: "/movies/add",
            type: "GET",
            data:{
                'userToken':userToken
            },
            success: function(){
                console.log('sim')
                window.location.href = "/movies/add";
            }
        });

и на сервере

const token = req.cookies.userToken
const decodedToken = jwt.verify(token, process.env.JWT_KEY)

и теперь это работает

0 голосов
/ 29 мая 2019

Вы запрашиваете "страницу" с помощью вызова AJAX и возвращаете HTML (res.render) в JavaScript.

Если вы хотите перейти на другой экран, вы должны либо использоватьгиперссылка или перенаправление с использованием JavaScript (location.href).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...