python中如何设置页面点击按钮时,不让token过期
时间: 2024-09-14 10:05:14 浏览: 44
在Python中,特别是在Web开发中,如果你想要防止页面上的令牌(如JWT、CSRF token等)过期,通常需要在服务器端管理并更新用户的会话信息。这里有几个关键步骤:
1. **验证和刷新**:每次用户请求时,首先检查令牌是否有效(过期时间)。如果过期了,返回一个包含新令牌的新响应,提示客户端更新其存储的令牌。
```python
from flask import Flask, request, jsonify
import jwt
app = Flask(__name__)
secret_key = "your_secret_key" # 用于解密和加密令牌的密钥
@app.route('/refresh_token', methods=['POST'])
def refresh_token():
old_token = request.headers.get('Authorization')
if not old_token or not validate_jwt(old_token):
return jsonify(error="Token expired"), 401
new_token = create_new_jwt() # 生成新的JWT
return jsonify(token=new_token), 200
def validate_jwt(token):
try:
payload = jwt.decode(token, secret_key, algorithms=["HS256"])
return True
except jwt.PyJWTError:
return False
def create_new_jwt():
data = {'user_id': 'some_user_id'}
return jwt.encode(data, secret_key, algorithm='HS256')
```
2. **前端处理**:在前端(比如JavaScript),当接收到新令牌时,将它存储在一个安全的地方(例如cookie或localStorage),并在后续请求中自动附带这个新的令牌。
```javascript
axios.post('/refresh_token', {旧token: localStorage.getItem('token')})
.then(response => {
localStorage.setItem('token', response.data.token);
// 更新其他需要发送此token的请求头
axios.defaults.headers.common['Authorization'] = `Bearer ${response.data.token}`;
})
.catch(err => handle_error(err));
```
3. **合理设定刷新频率**:为了提供良好的用户体验,可以设置合理的刷新间隔,比如每30分钟或用户活动一段时间后自动刷新。
**相关问题--:**
1. JWT过期时间是如何设置的?
2. Python中如何保护CSRF令牌?
3. 使用短 lived token策略的优势是什么?
阅读全文