当使用 Node.js 程序生成 JSON Web Token (JWT) 时,您需要决定如何存储生成的 token。根据您的具体情况和需求,您可以将 jwt 存储在 cookies、localStorage 中,或者作为 Authorization 头在 HTTP 请求中发送。
以下是三种存储 jwt 的方式:
存储在Cookie中
当您将 Token 存储在 Cookie 中时,每次 HTTP 请求都会自动附加 Cookie。这意味着您不需要手动添加 Authorization 标头或 localStorage,但在使用 HttpOnly 标记时,无法通过 JavaScript 访问 Token。
const jwt = require('jsonwebtoken');
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
app.use(cookieParser());
app.get('/login', (req, res) => {
// 登录逻辑
const user = { id: 1, name: 'test' };
const token = jwt.sign({ user }, 'secret_key');
res.cookie('jwt', token, { httpOnly: true });
res.send('You are logged in!');
});
app.get('/dashboard', (req, res) => {
const token = req.cookies.jwt;
if (!token) return res.status(401).send('Access Denied');
try {
const verified = jwt.verify(token, 'secret_key');
req.user = verified.user;
res.send('Welcome to dashboard, ' + req.user.name + '!');
} catch (err) {
res.status(400).send('Invalid Token');
}
});
存储在LocalStorage中
将 Token 存储在 LocalStorage 中意味着您需要通过 JavaScript 手动添加 Authorization 头。
const jwt = require('jsonwebtoken');
const axios = require('axios');
// 登录逻辑
const user = { id: 1, name: 'test' };
const token = jwt.sign({ user }, 'secret_key');
localStorage.setItem('jwt', token);
// 请求携带 Token
axios.get('/dashboard', {
headers: { Authorization: 'Bearer ' + localStorage.getItem('jwt') }
})
.then(res => console.log(res))
.catch(err => console.error(err));
存储在请求头中
最后一种方案是使用请求头作为 Token 的存储方式。这种方法可以防止跨站点请求攻击 (CSRF),但需要手动添加 Authorization 头。
const jwt = require('jsonwebtoken');
const axios = require('axios');
// 登录逻辑
const user = { id: 1, name: 'test' };
const token = jwt.sign({ user }, 'secret_key');
// 请求携带 Token
axios.get('/dashboard', {
headers: { Authorization: 'Bearer ' + token }
})
.then(res => console.log(res))
.catch(err => console.error(err));
这三种方案都有各自的优缺点,您可以根据自己的需求选择最适合您的方案。无论选择哪种方案,都需要确保 Token 保密且仅由合格的实体使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈node使用jwt生成的token应该存在哪里 - Python技术站