如何使用JWT实现用户登录?
时间: 2023-10-30 18:05:11 浏览: 42
JWT(JSON Web Token)是一种用于身份验证和授权的开放标准,它可以在客户端和服务器之间安全地传输信息。下面是使用JWT实现用户登录的基本步骤:
1. 用户向服务器发送登录请求,包含用户名和密码。
2. 服务器验证用户身份,如果验证通过,颁发一个JWT令牌并返回给客户端。
3. 客户端收到JWT令牌后,将其存储在本地。
4. 客户端向服务器发送请求时,在请求头中携带JWT令牌。
5. 服务器验证JWT令牌的合法性,如果合法,则允许请求访问受保护的资源。
下面是使用Node.js和Express框架实现JWT用户登录的示例代码:
```javascript
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
// 密钥,用于签发和验证JWT令牌
const secretKey = 'my_secret_key';
// 用户名和密码
const users = [
{ id: 1, username: 'admin', password: 'admin' },
{ id: 2, username: 'user', password: 'password' }
];
// 登录接口
app.post('/login', (req, res) => {
const { username, password } = req.body;
// 查找用户
const user = users.find(u => u.username === username && u.password === password);
if (user) {
// 签发JWT令牌
const token = jwt.sign({ id: user.id, username: user.username }, secretKey, { expiresIn: '1h' });
res.json({ token });
} else {
res.status(401).json({ message: '用户名或密码错误' });
}
});
// 受保护的资源
app.get('/protected', (req, res) => {
// 从请求头中获取JWT令牌
const token = req.headers.authorization?.split(' ')[1];
if (token) {
try {
// 验证JWT令牌
const decoded = jwt.verify(token, secretKey);
res.json({ message: '您已登录,可以访问受保护的资源' });
} catch (err) {
res.status(401).json({ message: '登录已过期,请重新登录' });
}
} else {
res.status(401).json({ message: '请先登录' });
}
});
app.listen(3000, () => console.log('Server started on http://localhost:3000'));
```
在上面的示例代码中,我们使用jsonwebtoken库来签发和验证JWT令牌。当用户登录成功后,我们使用jwt.sign函数签发一个包含用户ID和用户名的JWT令牌,并将其返回给客户端。在访问受保护资源时,客户端需要在请求头中携带JWT令牌。服务器会通过jwt.verify函数验证JWT令牌的合法性,如果合法则允许请求访问受保护的资源。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)