将 JWT 与 nodejs 和 express 一起使用
Posted
技术标签:
【中文标题】将 JWT 与 nodejs 和 express 一起使用【英文标题】:Using JWT with nodejs and express 【发布时间】:2020-04-30 09:00:29 【问题描述】:我正在尝试在后端添加 JWT 而不是 express-session。 我不知道如何将它与 nodejs + 路由一起使用。
我试过这个,所以我可以在每条路线上使用它:
const jwt = 'jsonwebtoken'
app.use(jwt())
我知道“jwt 不是函数”。
比我试过这个:
app.use(
jwt.sign(, 'secret')
);
我知道“app.use() 需要一个中间件函数” 而不是 我想在前端通过时输入用户。
我应该创建 jwtService 文件并将其导入到每个使用 jwt 的路由吗? 还是在每条路线中都需要 jsonwebtoken?
【问题讨论】:
【参考方案1】:确保你安装了这个包,你需要先导入/需要它。
const jwt =require('jsonwebtoken');
【讨论】:
我做到了,但我的应用程序中有路由,jwt 在其他路由中不起作用。我在其他路由中得到“TypeError:无法读取未定义的属性'符号'”。我应该在使用它的后端的每个文件中都需要jwt吗? ...或者我可以像使用会话一样使用 app.use(jwt)? 是的,你需要在每个需要jwt的文件中直接导入。【参考方案2】:您实现这些库的方式总是会根据您的项目标准而有所不同。
我将在这里尝试简化一点,以尽可能地简化。
假设你有一个/login
路由。
const express = require('express')
const bodyParser = require('body-parser')
const cookieParser = require('cookie-parser')
const app = express();
app.use(bodyParser.json());
app.use(cookieParser());
app.post('/login', loginHandler); // YOUR route with JWT inside of login funciton.
app.listen(3000);
app.post
的第二个参数将是包含 JWT 处理程序的函数,例如:
const loginHandler = (req, res) =>
// username and password
const username, password = req.body
// create new token
const myJwtToken = jwt.sign( username ,
jwtKey,
algorithm: 'HS256',
expiresIn: XXSeconds // The expiredIn property can be human readable like '6 months', '1 week', etc.
);
console.log('My token is: ', myJwtToken);
// set token and expiry date
res.cookie('token', myJwtToken, maxAge: XXSeconds * 1000 );
res.end();
有用的链接:
jsonwebtoken 示例 示例实现 I Node.js with JWT - DEVTO 示例实现 II - FreeCodeCamp【讨论】:
以上是关于将 JWT 与 nodejs 和 express 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
当用户在nodeJS / Express和Angular中空闲一段时间(基于令牌的授权)时,我如何使我的JWT令牌过期