Django 配置JWT认证方式

1. 安装 rest_framework + djangorestframework_simplejwt

安装djangorestframework_simplejwt :pip install djangorestframework-simplejwt

安装rest_framework: pip install djangorestframework

djangorestframework_simplejwt 是提供 jwt 的 django 应用。

2. 配置好 rest_framework 后,settings.py 里加上以下内容以支持 jwt认证

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

3. 写个测试的 view

from rest_framework import permissions
from rest_framework_simplejwt import authentication
class TestView(views.APIView):
    permission_classes = [permissions.IsAuthenticated]
    authentication_classes = (authentication.JWTAuthentication,)
    def get(self, request, *args, **kwargs):
        return Response('ok')

4.urls.py 导入 jwt 的两个 view

from rest_framework_simplejwt.views import (
    TokenObtainPairView, 
    TokenRefreshView,     
)

urlpatterns = [
   ...
    url(r'^api/auth/token/obtain/$', TokenObtainPairView.as_view()),    # 需要添加的内容
    url(r'^api/auth/token/refresh/$', TokenRefreshView.as_view()),    # 需要添加的内容
    url(r'^api/test/$', TestView.as_view()),    # 添加测试views的路由
   ...
]

5. 获取Token

先启动 server 端口为默认的8000

方式一:通过curl

cmd 里运行 curl,获取 token

curl   -X POST   -H "Content-Type: application/json"   -d '{"username": "abab", "password": "abab123456"}'   http://localhost:8000/api/auth/token/obtain/

结果返回了 token

{"access":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwidXNlcl9pZCI6MywianRpIjoiZDRlMTJiMjk0M2ZiNGFkYTg1NzZiNWIzMzcyY2RlMjQiLCJleHAiOjE1MzE1MDY5Njl9.S1MPTw359xVK-GpmJary1fZwDsHb8yXsVtyf-tCbHM8","refresh":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsInVzZXJfaWQiOjMsImp0aSI6IjAyYWM3NmQ0MDBkNzRlYzNhOGU5NDM2MWYzYzUzMWQyIiwiZXhwIjoxNTMxNTkzMDY5fQ.rXkYG2SJ74vof3rA38xX-EfMagHxeQRv7ZolszofuHA"}

方式二:通过PostMan 软件

只需要设置如下三个地方就可以了

postman获取token

6. 提供 token,获取 testview 的信息

方式一:通过curl

curl \
>   -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwidXNlcl9pZCI6MywianRpIjoiZDRlMTJiMjk0M2ZiNGFkYTg1NzZiNWIzMzcyY2RlMjQiLCJleHAiOjE1MzE1MDY5Njl9.S1MPTw359xVK-GpmJary1fZwDsHb8yXsVtyf-tCbHM8" \
>   http://localhost:8000/api/test/
"ok"

方式二:通过PostMan 软件

设置如下几个地方,看你的接口是Get请求还是Post请求,自己设置接口请求方式。

Token 填写的是上一步获取到的Token内容

接口获取数据

默认Token过期时间为5分钟,可以通过设置修改过期时间,设置方法和详细设置文档,去Bigyoung小站(bigyoung.cn)查看进阶内容。

本文首发于BigYoung小站

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
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 的基本步骤,你可以在此基础上自行拓展和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Young文人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值