【问题标题】:sending json web token using ajax to Node API使用 ajax 向 Node API 发送 json Web 令牌
【发布时间】:2019-10-15 07:00:22
【问题描述】:

我正在尝试使用 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);
            }
        });

movies/add 路由正在接收请求,因为它正在打印“它已输入”,但它没有重定向到 movies/addMovies。我错过了什么?

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

        console.log('it entered')

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


    });

【问题讨论】:

    标签: node.js ajax cookies


    【解决方案1】:

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

    如果您想导航到另一个屏幕,您应该使用超链接或使用 JavaScript (location.href) 重定向。

    【讨论】:

    • 我应该在哪里使用超链接或重定向?
    • 如果您尝试导航到新屏幕,可以将 $ajax... 代码替换为 location.href = '/add'(或实际 URL 应为的任何内容)
    • 但我想在向服务器发送令牌后导航。只有在服务器授权后
    • 您需要在发出/add 请求的同时进行授权,否则知道/add 的人可以在不经过该过程的情况下访问该页面。您可以检查 200 的 AJAX 响应,然后导航,但这对我来说似乎有点矫枉过正。
    • 我已更改为:$.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),现在它可以工作了
    【解决方案2】:

    我已经改成这样了:

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

    现在可以了

    【讨论】:

      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 2020-11-13
      • 1970-01-01
      • 2016-04-03
      • 2017-10-28
      • 2022-01-02
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多