django如何使用jwt
时间: 2023-09-14 14:11:07 浏览: 104
JWT(JSON Web Token)是一种用于在客户端和服务器之间传递安全信息的开放标准。在 Django 中使用 JWT 可以实现用户认证和授权功能。下面是 Django 中使用 JWT 的步骤:
1. 安装 Django JWT 库:可以使用 pip 命令来安装 Django JWT 库,命令如下:
```
pip install djangorestframework-jwt
```
2. 配置 Django 设置:在 Django 项目的 `settings.py` 中添加以下设置:
```
INSTALLED_APPS = [
# ...
'rest_framework',
'rest_framework_jwt',
# ...
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
JWT_AUTH = {
'JWT_SECRET_KEY': 'your-secret-key',
'JWT_ALGORITHM': 'HS256',
}
```
这将启用 JWT 认证,并配置 JWT 的密钥和算法。
3. 创建登录视图函数:在 Django 应用中创建一个视图函数,用于处理用户登录请求,并返回 JWT。例如:
```
from django.contrib.auth import authenticate
from rest_framework_jwt.settings import api_settings
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(['POST'])
def login(request):
username = request.data.get('username')
password = request.data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
return Response({'token': token})
else:
return Response({'error': 'Invalid credentials'})
```
这个视图函数接收 POST 请求,从请求数据中获取用户名和密码,并使用 Django 的 `authenticate` 函数验证用户身份。如果认证成功,使用 JWT 库生成 JWT,并将其包含在 HTTP 响应中返回。
4. 创建受保护的视图函数:在 Django 应用中创建一个视图函数,用于处理需要进行身份验证的请求。例如:
```
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
@api_view(['GET'])
@authentication_classes([JSONWebTokenAuthentication])
@permission_classes([IsAuthenticated])
def protected(request):
return Response({'message': 'This is a protected view'})
```
这个视图函数使用 `JSONWebTokenAuthentication` 进行身份验证,并使用 `IsAuthenticated` 权限类进行授权。只有具有有效 JWT 的用户才能访问该视图函数。
5. 发送 JWT:在客户端进行登录时,需要向登录视图函数发送包含用户名和密码的 POST 请求。登录成功后,将从响应中获取 JWT,并将其包含在以后的请求中。例如,在使用 jQuery 的情况下,可以使用以下代码将 JWT 包含在 HTTP 请求头中:
```
$.ajax({
url: '/login/',
method: 'POST',
data: {username: 'your-username', password: 'your-password'},
success: function(response) {
var token = response.token;
$.ajax({
url: '/protected/',
method: 'GET',
headers: {'Authorization': 'Bearer ' + token},
success: function(response) {
console.log(response.message);
}
});
}
});
```
这将发送一个包含用户名和密码的 POST 请求到 `/login/`,并从响应中获取 JWT。然后,使用该 JWT 发送 GET 请求到 `/protected/`,并将 JWT 包含在 `Authorization` 头中。
以上就是 Django 中使用 JWT 的基本步骤,你可以在此基础上自行拓展和优化。
阅读全文