【问题标题】:Using JWT with nodejs and express将 JWT 与 nodejs 和 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?

【问题讨论】:

    标签: node.js express jwt


    【解决方案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();
    }
    

    有用的链接:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-13
      • 2011-08-18
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2018-06-17
      相关资源
      最近更新 更多