wap_refresh_token Cookie的作用
时间: 2023-09-19 19:09:54 浏览: 75
wap_refresh_token Cookie是用于在用户登录过期时使用的一种身份验证方式。它的作用是在用户的登录凭证(access_token)过期之后,使用该cookie来获取新的凭证,从而保持用户在应用程序中的登录状态。这个cookie通常是由服务端生成并在响应头中返回给客户端,客户端需要将其保存,并在需要时发送给服务端以获取新的access_token。这样做的好处是,用户在使用应用程序时不需要频繁地输入用户名和密码,同时也保证了用户的安全性。
相关问题
JWT_REFRESH_TOKEN_EXPIRES 怎么使用,给我写一个例子
JWT_REFRESH_TOKEN_EXPIRES 是一个用于设置 JWT 刷新令牌过期时间的变量,它通常与 JWT_ACCESS_TOKEN_EXPIRES 一起使用。下面是一个使用 Flask-JWT-Extended 扩展的例子:
```python
from flask import Flask
from flask_jwt_extended import JWTManager, create_access_token, create_refresh_token, jwt_required, jwt_refresh_token_required, get_jwt_identity, get_raw_jwt
app = Flask(__name__)
app.config['JWT_SECRET_KEY'] = 'super-secret' # 设置 JWT 密钥
app.config['JWT_ACCESS_TOKEN_EXPIRES'] = 3600 # 设置访问令牌过期时间为 1 小时
app.config['JWT_REFRESH_TOKEN_EXPIRES'] = 604800 # 设置刷新令牌过期时间为 1 周
jwt = JWTManager(app)
# 用户登录,生成访问令牌和刷新令牌
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username', None)
password = request.json.get('password', None)
if username != 'admin' or password != 'admin':
return jsonify({'msg': 'Invalid username or password'}), 401
access_token = create_access_token(identity=username)
refresh_token = create_refresh_token(identity=username)
return jsonify({'access_token': access_token, 'refresh_token': refresh_token}), 200
# 使用访问令牌访问受保护的资源
@app.route('/protected', methods=['GET'])
@jwt_required
def protected():
current_user = get_jwt_identity()
return jsonify({'msg': f'Hello, {current_user}!'}), 200
# 使用刷新令牌刷新访问令牌
@app.route('/refresh', methods=['POST'])
@jwt_refresh_token_required
def refresh():
current_user = get_jwt_identity()
access_token = create_access_token(identity=current_user)
return jsonify({'access_token': access_token}), 200
if __name__ == '__main__':
app.run()
```
在上面的例子中,我们设置了 JWT_REFRESH_TOKEN_EXPIRES 为 1 周,表示刷新令牌在 1 周后过期。当用户登录成功后,我们生成了一个访问令牌和一个刷新令牌,并将它们返回给客户端。当客户端使用访问令牌访问受保护的资源时,我们使用 @jwt_required 装饰器来保护该路由,只有在客户端提供有效的访问令牌时才能访问。当客户端的访问令牌过期时,客户端可以使用刷新令牌来获取新的访问令牌,我们使用 @jwt_refresh_token_required 装饰器来保护刷新令牌路由,只有在客户端提供有效的刷新令牌时才能刷新访问令牌。
rest_framework_jwt 如何使用refresh token进行token续期
使用 `rest_framework_jwt` 进行 token 续期需要执行以下步骤:
1. 在 `settings.py` 中添加 `JWT_ALLOW_REFRESH` 配置项:
```python
JWT_AUTH = {
# ... 其他配置项 ...
'JWT_ALLOW_REFRESH': True,
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
}
```
其中,`JWT_ALLOW_REFRESH` 配置项表示是否允许使用 refresh token 进行 token 续期,`JWT_REFRESH_EXPIRATION_DELTA` 配置项表示 refresh token 的有效期,这里设置为 7 天。
2. 在 `urls.py` 中添加 `refresh_jwt_token` 视图的路由:
```python
from rest_framework_jwt.views import refresh_jwt_token
urlpatterns = [
# ... 其他路由 ...
path('api/token/refresh/', refresh_jwt_token),
]
```
3. 在前端代码中,当 token 过期后,使用 refresh token 进行 token 续期。示例代码如下:
```javascript
const refreshToken = localStorage.getItem('refreshToken');
if (refreshToken) {
fetch('/api/token/refresh/', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ refresh: refreshToken }),
})
.then((response) => response.json())
.then((data) => {
localStorage.setItem('accessToken', data.access);
localStorage.setItem('refreshToken', data.refresh);
})
.catch((error) => {
console.error('Failed to refresh token', error);
});
} else {
console.error('No refresh token found');
}
```
在上面的代码中,我们首先从本地存储中获取 refresh token,然后使用 `fetch` 发送 POST 请求到 `/api/token/refresh/` 视图,将 refresh token 作为请求体的 `refresh` 参数。在成功获取到新的 access token 和 refresh token 后,我们将它们保存到本地存储中。
希望这可以帮助你理解如何使用 `rest_framework_jwt` 进行 token 续期。
阅读全文