使用Ajax将JSON Web令牌发送到Node API

时间:2019-05-29 15:51:38

标签: node.js ajax cookies

我正在尝试使用jsonwebtoken,cookie解析器来在客户端中设置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 :(得分:0)

您正在通过AJAX调用请求“页面”,并将HTML(res.render)返回到JavaScript。

如果要导航到另一个屏幕,则应使用超链接或使用JavaScript(location.href进行重定向。

答案 1 :(得分:0)

我已更改为:


$.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)

现在可以了