将 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令牌过期

在 Rest API 中使用 Facebook 在 Express 和 NodeJS 中维护 JWT 的密钥和访问令牌

JWT nodejs / express - 无效签名

jsonwebtoken和express-jwt的使用

express-jwt-authz 和打字稿

使用 angular 和 express-jwt 实现刷新令牌