若依框架(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)传输,并且密钥需要安全存储。