• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

DjangoRestFramework 使用 simpleJWT 登陆认证完整记录

python 搞代码 4年前 (2022-01-07) 35次浏览 已收录 0个评论

Djangorestframework-simplejwt是Django REST Framework框架的一个jwt插件,使用 python http 工具进行接口测试的方法文中给大家提到,重点给大家分享djangorestframework-simplejwt 使用记录及登陆认证的完成过程,感兴趣的朋友跟随小编一起看看吧

本文为 djangorestframework-simplejwt 使用记录。(官方文档)

 1. 安装 

 pip install djangorestframework-simplejwt

 2. 使用

 创建 Django 项目及 app:

 # 创建名为 simple 的工程 django-admin startproject simple # 创建名为 users 的应用 cd simple python manage.py startapp users

 目录结构如下:

 在 `simple/settings.py` 中进行配置:

 # simple/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'users',                        # add 'rest_framework',               # add 'rest_framework_simplejwt',     # add ] REST_FRAMEWORK = {                  # add 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ) }

 同步数据库并创建超级用户:

 # 同步数据库 python manage.py makemigrations python manage.py migrate # 创建超级用户 python manage.py createsuperuser

在 `simple/urls.py` 中编写路由: 

 # simple/urls.py from django.contrib import admin from django.urls import path from rest_framework_simplejwt.views import TokenRefreshView, TokenVerifyView, TokenObtainPairView urlpatterns = [ path('admin/', admin.site.urls), path('login/', TokenObtainPairView.as_view(), name='token_obtain_pair'), path('refresh/', TokenRefreshView.as_view(), name='token_refresh'), path('verify/', TokenVerifyView.as_view(), name='token_verify'), ]

 使用 python http 工具进行接口测试:

http -f POST http://127.0.0.1:8000/login/ username=admin password=123456

 3. 测试 API 接口

 在 `users/views.py` 中编写如下代码:

 # users/views.py from rest_framework import permissions from rest_framework.response import Response from rest_framework.views import APIView class MyView(APIView): permission_classes = [permissions.IsAuthenticated] def get(self, request, *args, **kwargs): return Response("Get information successfully!")

 然后在 `simple/urls.py` 中添加路由:

 # simple/urls.py from users import views    # add urlpatterns = [ ... path('info/', views.MyView.as_view()),    # add ]

 使用 python http 工具进行测试:

4. 配置相关  

 # settings.py from datetime import timedelta SIMPLE_JWT = { 'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),  # 访问令牌的有效时间 'REFRESH_TOKEN_LIFETIME': timedelta(days=1),    # 刷新令牌的有效时间 'ROTATE_REFRESH_TOKENS': False,     # 若为True,则刷新后新的refres<mark style="color:transparent">来源gaodaimacom搞#^代%!码网</mark>h_token有更新的有效时间 'BLACKLIST_AFTER_ROTATION': True,   # 若为True,刷新后的token将添加到黑名单中, # When True,'rest_framework_simplejwt.token_blacklist',should add to INSTALLED_APPS 'ALGORITHM': 'HS256',       # 对称算法:HS256 HS384 HS512  非对称算法:RSA 'SIGNING_KEY': SECRET_KEY, 'VERIFYING_KEY': None,      # if signing_key, verifying_key will be ignore. 'AUDIENCE': None, 'ISSUER': None, 'AUTH_HEADER_TYPES': ('Bearer',),           # Authorization: Bearer  'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',   # if HTTP_X_ACCESS_TOKEN, X_ACCESS_TOKEN: Bearer  'USER_ID_FIELD': 'id',                      # 使用唯一不变的数据库字段,将包含在生成的令牌中以标识用户 'USER_ID_CLAIM': 'user_id', # 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),   # default: access # 'TOKEN_TYPE_CLAIM': 'token_type',         # 用于存储令牌唯一标识符的声明名称 value:'access','sliding','refresh' # # 'JTI_CLAIM': 'jti', # # 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',     # 滑动令牌是既包含到期声明又包含刷新到期声明的令牌 # 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),       # 只要滑动令牌的到期声明中的时间戳未通过,就可以用来证明身份验证 # 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),  # path('token|refresh', TokenObtainSlidingView.as_view()) }

 5. 自定义返回 token 信息

 在 `users/serializers.py` 中编写如下代码:

 # simple/serializers.py from rest_framework_simplejwt.serializers import TokenObtainPairSerializer class MyTokenObtainPairSerializer(TokenObtainPairSerializer): def validate(self, attrs): data = super().validate(attrs) refresh = self.get_token(self.user) data['refresh'] = str(refresh) data['access'] = str(refresh.access_token) data['username'] = self.user.username return data

 在 ‘users/views.py` 及 `simple/urls.py` 中编写如下代码:

 # users/views.py from rest_framework_simplejwt.views import TokenObtainPairView from users.serializers import MyTokenObtainPairSerializer class MyTokenObtainPairView(TokenObtainPairView): serializer_class = MyTokenObtainPairSerializer # simple/urls.py from users.views import MyTokenObtainPairView urlpatterns = [ ... # modify path('login/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'), ]

测试 API,可以看到返回的信息中多了 username 信息: 

http -f POST :8000/login/ username=admin password=123456

6. 手动颁发 token 

手动颁发 token 主要针对用户注册的情况,用户注册完之后直接返回 token。

以下代码即针对一个 user 对象手动颁发一个 token 并返回。(用户注册同理,即 user 对象为注册后获取的用户)

 # users/views.py class MyView(APIView): permission_classes = [permissions.IsAuthenticated] def get(self, request, *args, **kwargs): return Response("Get information successfully!") def post(self, request, *args, **kwargs): refresh = RefreshToken.for_user(request.user) content = { 'refresh': str(refresh), 'access': str(refresh.access_token), } return Response(content)

到此这篇关于DjangoRestFramework 使用 simpleJWT 登陆认证完整记录的文章就介绍到这了,更多相关DjangoRestFramework登陆认证内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是DjangoRestFramework 使用 simpleJWT 登陆认证完整记录的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:DjangoRestFramework 使用 simpleJWT 登陆认证完整记录

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址