如何从前端保存和发送JWT令牌

时间:2020-09-21 18:40:59

标签: node.js mongodb express jwt

我在我的node.js应用程序中使用JWT。带有令牌的所有东西都可以正常工作。登录后我可以获得令牌。

这是我检查用户身份验证的方式:

const jwt = require('jsonwebtoken')

try{
    const token = req.headers.authorization
    const decoded = jwt.verify(token, 'secret')
    req.userData = decoded
    next()
}
catch(err){
    return res.send("Auth error")
}

如果我使用登录后获得的令牌更改token的值,就可以访问受保护的路由。

但是我想保存令牌(在用户端??),并且每次用户尝试访问(从前端)受保护的路由时,都以req.headers.authorization的形式发送令牌,以便令牌可以验证,用户可以访问路由。

那么,如何保存并稍后发送令牌,该令牌是在每次将受保护的路由链接到用户登录后生成的?

谢谢。

(我没有使用任何javascript前端框架)

2 个答案:

答案 0 :(得分:0)

将其保存到本地存储的常用方法。只需记住本地存储大小和其他浏览器中的其他限制。

答案 1 :(得分:0)

如果它是用于身份验证的令牌,则可以使用httpOnly cookie来防止XSS攻击,这会对本地存储造成威胁。

要在Express的cookie中保存JWT:

const accessToken = jwt.sign(); 

return res
    .status(201)
    .cookie("accessToken", accessToken, {
        httpOnly: true,
        maxAge: (1000*60*5), // 5m
        secure: true,
        signed: true
    })
    .end();

从请求中获取时:

const { accessToken } = req.signedCookies;

在您的app.js内:

const express = require("express");
const cookieParser = require("cookie-parser");
const app = express();

app.use(cookieParser("secret"));

使用httpOnly cookie,您的请求会自动将cookie与请求一起发送(仅当cookie属于同一域时)。只需确保您的CORS和http客户端已正确配置以处理Cookie