在实现用户登录时,通常使用JWT(JSON Web Tokens)和Redis来管理用户的登录状态。以下是两种实现方式:
使用JWT:
用户登录时,后端验证用户凭据,然后生成一个JWT token,将其返回给客户端。之后客户端每次请求都携带这个token。后端对token进行验证。
import jwt
import datetime
# 生成token
def create_jwt(user_id):
payload = {
'iat': int(datetime.datetime.utcnow().timestamp),
'exp': int(datetime.datetime.utcnow().timestamp) + 60*60, # 有效期1小时
'sub': user_id
}
token = jwt.encode(payload, 'secret_key', algorithm='HS256')
return token
# 验证token
def verify_jwt(token):
try:
payload = jwt.decode(token, 'secret_key', algorithms=['HS256'])
return payload['sub']
except jwt.ExpiredSignatureError:
return None
使用Redis + token:
用户登录时,后端验证用户凭据,然后在Redis中存储一个session,并生成一个唯一的token与之关联,将token返回给客户端。之后客户端每次请求都携带这个token。后端通过查询Redis来验证token的有效性。
import redis
import uuid
# 连接Redis
r = redis.Redis(host='localhost', port=6379, db=0)
# 用户登录时生成token并存储在Redis
def login(user_id):
token = uuid.uuid4().hex
r.set(token, user_id, ex=3600) # session有效期1小时
return token
# 验证token
def is_logged_in(token):
user_id = r.get(token)
if user_id:
return user_id.decode('utf-8')
return None
在实际应用中,你可能需要根据具体需求和安全等级选择合适的方法,并结合数据库和其他安全措施来保护用户信息。