使用Jquery发送头以访问Node.js路由

使用Jquery发送头以访问Node.js路由,jquery,node.js,ajax,header,jwt,Jquery,Node.js,Ajax,Header,Jwt,我有一个非常具有挑战性的问题。我刚开始使用JWT。我进行登录,并将令牌作为JSON响应发送给客户端。我将其保存到会话存储,然后我想使用令牌访问受保护的路由,这基本上是用户登录时应该看到的 问题是,我还应该以某种方式从客户机在头之间发送令牌。现在我只需对该路径执行window.location.pathname='/LimeLINE/chatroom' 我觉得应该有一个额外的步骤来做这件事,比如在客户机上获得 因此,第1步,登录客户端: // Login POST $('#frm-log

我有一个非常具有挑战性的问题。我刚开始使用JWT。我进行登录,并将令牌作为JSON响应发送给客户端。我将其保存到会话存储,然后我想使用令牌访问受保护的路由,这基本上是用户登录时应该看到的

问题是,我还应该以某种方式从客户机之间发送令牌。现在我只需对该路径执行
window.location.pathname='/LimeLINE/chatroom'

我觉得应该有一个额外的步骤来做这件事,比如客户机上获得

因此,第1步,登录客户端:

// Login POST 
    $('#frm-login').submit(function (e) {
        event.preventDefault()
        $('button').text('Please wait ...').prop('disabled')
        $.ajax({
            url: "/login-user",
            type: "POST",
            data: $('#frm-login').serialize(),
            dataType: "json"
        }).always(function (response) {
            $('button').text('Logging in').prop('disabled')
            console.log("Login", response)
            if (response.status == "error") {
                $('button').removeClass('lime').addClass('red').text('Log in failed. Try again.');
                return
            }
            //console.log(response)
            const token = response.token;
            sessionStorage.setItem(token, token);
            window.location.pathname = '/LimeLINE/chatroom'
        })
    })
因此,第2步,登录服务器:

/********************* LOGIN *********************/

app.post('/login-user', (req, res) => {
    user.loginUser(req.body, (err, jResult) => {
        if (err) {
            return res.send(jResult)
        }
        let token = jwt.sign({
            user: jResult,
        }, "supersecret", (err, token) => {
            if (err) {
                return res.statusCode(500)
            }
        })
        console.log(token)
        return res.json({
            token: token
        })
        //add other headers here...
    })
})
以及受保护的路线:

// *********************   MAIN PAGE *************************

app.get('/LimeLINE/chatroom', verifyToken, (req, res) => {
    jwt.verify(req.token, "supersecret", (err, authData) => {
        if (err) {
            return res.status(403).json({
                message: "No token found"
            });
        } else {
            try {
                var sMainHtml = fs.readFileSync(__dirname + '/html/main.html', 'utf8')

            } catch (e) {
                console.log(e)
                return res.sendStatus(500)
            }
            return res.send(sMainHtml);
            /*return res.json({
                authData
            });*/
        }
    })
})

服务器是否将令牌设置为响应上的cookie?如果将令牌设置为cookie,则对设置cookie的同一域发出的任何浏览器请求都将自动在请求中包含该cookie。如果您将xhr上的
withCredentials
设置为true,甚至ajax请求也可以执行相同的操作。否,它将作为JSON发送。我读到现在饼干不那么受欢迎。据说饼干没什么问题。尤其是在身份验证方面。但是需要注意的是,建议设置HttpOnly头(),这样javascript就没有访问它们的能力。