若依框架api走jwt验证的实现流程是什么样的?

Resin_Wu

关注

阅读 15

02-18 21:00

若依框架(Vuetify + Element UI 基础上开发的中后台前端解决方案)支持JWT(JSON Web Tokens)进行身份验证。以下是使用JWT进行验证的实现流程:


### 1. 配置后端


#### a. 生成JWT令牌

后端在用户登录成功后,需要生成一个JWT令牌。这通常使用JWT库(如`jsonwebtoken`在Node.js中)来完成。


```javascript

const jwt = require('jsonwebtoken');


const secretOrKey = 'your-256-bit-secret'; // 密钥


// 登录成功后,生成JWT

const token = jwt.sign(

 {

   userId: user.id,

   username: user.username

 },

 secretOrKey,

 {

   expiresIn: '1h' // 设置过期时间

 }

);


// 发送token给客户端

response.json({ token });

```


#### b. 设置中间件验证JWT

在后端,你需要设置一个中间件来验证每个请求的JWT令牌。


```javascript

const jwt = require('jsonwebtoken');


module.exports = (req, res, next) => {

 const token = req.header('Authorization').replace('Bearer ', '');

 if (!token) return res.status(403).send({ message: 'Access denied. No token provided.' });


 try {

   const verified = jwt.verify(token, secretOrKey);

   req.user = verified;

   next();

 } catch (err) {

   res.status(400).send({ message: 'Invalid token.' });

 }

};

```


### 2. 配置前端


#### a. 保存JWT令牌

前端在接收到JWT令牌后,通常将其保存在浏览器的`localStorage`或`sessionStorage`中。


```javascript

// 假设从后端接收到的token如下

const token = 'your-jwt-token';


// 保存到localStorage

localStorage.setItem('token', token);

```


#### b. 设置请求头

在发送请求到需要验证的API时,需要在请求头中包含JWT令牌。


```javascript

const axios = require('axios');


// 设置请求头

axios.defaults.headers.common['Authorization'] = `Bearer ${localStorage.getItem('token')}`;


// 发送请求

axios.get('your-api-endpoint')

 .then(response => {

   // 处理响应

 })

 .catch(error => {

   // 处理错误

 });

```


### 3. 实现流程


1. 用户登录后,后端验证用户信息,生成JWT令牌并返回给前端。

2. 前端接收到JWT令牌,并保存在`localStorage`中。

3. 前端在发起请求到受保护的路由或API时,设置请求头包含JWT令牌。

4. 后端中间件接收到请求,从请求头中提取JWT令牌,并验证其有效性。

5. 如果JWT令牌有效,请求将继续处理;如果无效,将返回401或403错误。


这个过程确保了用户的会话在登录后能够持续,且每个对后端资源的访问都经过身份验证。记住,JWT令牌应该通过安全的通信渠道(如HTTPS)传输,并且密钥需要安全存储。

精彩评论(0)

0 0 举报