Redis Token 过期刷新方案
作为一名经验丰富的开发者,我很高兴能帮助刚入行的小白们理解并实现 Redis Token 过期刷新方案。在本文中,我将详细介绍整个流程,并提供必要的代码示例。
流程概述
首先,让我们通过一个表格来概述整个流程:
步骤 | 描述 |
---|---|
1 | 客户端发送登录请求 |
2 | 服务端验证用户身份 |
3 | 服务端生成 Token |
4 | 服务端设置 Token 过期时间并存储到 Redis |
5 | 客户端接收 Token 并进行存储 |
6 | 客户端使用 Token 进行请求 |
7 | 服务端验证 Token 有效性 |
8 | 服务端刷新 Token 过期时间 |
9 | 客户端更新本地存储的 Token |
详细步骤与代码示例
步骤 1: 客户端发送登录请求
客户端通过用户名和密码向服务端发送登录请求。
步骤 2: 服务端验证用户身份
服务端接收到登录请求后,验证用户名和密码的正确性。
def validate_user(username, password):
# 假设这里有用户验证逻辑
if username == "admin" and password == "password":
return True
return False
步骤 3: 服务端生成 Token
验证成功后,服务端生成一个 Token。
import jwt
def generate_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1) # 设置过期时间为 1 小时
}
token = jwt.encode(payload, 'secret_key', algorithm='HS256')
return token
步骤 4: 服务端设置 Token 过期时间并存储到 Redis
将 Token 和其过期时间存储到 Redis 中。
import redis
r = redis.Redis()
def save_token_to_redis(token, user_id):
r.setex(f"token:{user_id}", 3600, token) # 设置过期时间为 1 小时
步骤 5: 客户端接收 Token 并进行存储
客户端接收到 Token 后,将其存储在本地(如 localStorage 或 cookie)。
步骤 6: 客户端使用 Token 进行请求
客户端在每次请求时,将 Token 作为请求头发送给服务端。
步骤 7: 服务端验证 Token 有效性
服务端接收到请求后,首先验证 Token 的有效性。
def verify_token(token):
try:
payload = jwt.decode(token, 'secret_key', algorithms=['HS256'])
return payload
except jwt.ExpiredSignatureError:
return None
步骤 8: 服务端刷新 Token 过期时间
如果 Token 有效,服务端刷新其在 Redis 中的过期时间。
def refresh_token_expiration(token, user_id):
current_token = r.get(f"token:{user_id}")
if current_token == token:
r.expire(f"token:{user_id}", 3600) # 刷新过期时间为 1 小时
步骤 9: 客户端更新本地存储的 Token
如果服务端返回新的 Token,客户端需要更新本地存储的 Token。
// 假设新的 Token 存储在 response.token 中
localStorage.setItem('token', response.token);
类图
以下是使用 Mermaid 语法生成的类图:
classDiagram
class Client {
+sendLoginRequest()
+storeToken()
+sendRequestWithToken()
+updateToken()
}
class Server {
+validateUser()
+generateToken()
+saveTokenToRedis()
+verifyToken()
+refreshTokenExpiration()
}
Client --> Server: sendLoginRequest()
Client <-- Server: receiveToken()
Client --> Server: sendRequestWithToken()
Server --> Client: verifyToken()
Server --> Client: refreshToken()
Client --> Client: updateToken()
结语
通过本文的介绍,相信刚入行的小白们已经对 Redis Token 过期刷新方案有了初步的了解。在实际开发过程中,可能还会遇到各种问题,但只要掌握了基本原理和方法,就能够灵活应对。希望本文对大家有所帮助,也欢迎大家在实际开发中不断探索和实践。