我在我的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前端框架)
答案 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