zoukankan      html  css  js  c++  java
  • JWT安装与配置

    1.JWT安装配置
    1.1 安装JWT
    pip install djangorestframework-jwt==1.11.0
    1.2 syl/settings.py 配置jwt载荷中的有效期设置
    # jwt载荷中的有效期设置 
    JWT_AUTH = { 
    # 1.token前缀:headers中 Authorization 值的前缀 
    'JWT_AUTH_HEADER_PREFIX': 'JWT',
    # 2.token有效期:一天有效 'JWT_EXPIRATION_DELTA':datetime.timedelta(days=1), # 3.刷新token:允许使用旧的token换新token 'JWT_ALLOW_REFRESH': True, # 4.token有效期:token在24小时内过期, 可续期
    token 'JWT_REFRESH_EXPIRATION_DELTA':datetime.timedelta(hours=24),
    # 5.自定义JWT载荷信息:自定义返回格式,需要手工创建
    'JWT_RESPONSE_PAYLOAD_HANDLER':'user.utils.jwt_response_payload_handler'
    1.3 syl/settings.py JWT结合DRF进行认证权限配置
    # 在DRF配置文件中开启认证和权限 
    REST_FRAMEWORK = { 
    ... 
    # 用户登陆认证方式 
    'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', 
    
    # 在 DRF中配置JWT认证 # 'rest_framework.authentication.SessionAuthentication',
    # 使用session时 的认证器 # 'rest_framework.authentication.BasicAuthentication'
    # 提交表单时的认 证器 ],# 权限配置, 顺序靠上的严格 'DEFAULT_PERMISSION_CLASSES': [
    # 'rest_framework.permissions.IsAdminUser', # 管理员可以访问
    'rest_framework.permissions.IsAuthenticated', # 全局配置只有认 证用户可以访问接口 #
    'rest_framework.permissions.IsAuthenticatedOrReadOnly', # 认证用户可以访 问, 否则只能读取 #
    'rest_framework.permissions.AllowAny', # 所有用户都可以 访问 ],... }
    1.4 user/urls.py 增加获取token接口和刷新token接口
    from django.urls import include,
    path from rest_framework.authtoken.views import obtain_auth_token
    from user import views
    from rest_framework.routers import SimpleRouter,
    DefaultRouter from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token
    # 自动生成路由方法, 必须使用视图集 # router = SimpleRouter()
    # 没有根路由 /user/ 无法识别 router = DefaultRouter()
    # 有根路由 router.register(r'user', views.UserViewSet) urlpatterns = [ path('index/', views.index),
    # 函数视图 path('login/', obtain_jwt_token), # 获取token,登录视图 path('refresh/', refresh_jwt_token),
    # 刷新token path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
    # 认证地址 ]urlpatterns += router.urls
    # 模块地址 # print(router.urls)
    1.5 在user/utils.py中从写jwt_response_payload_handler
    def jwt_response_payload_handler(token, user=None, request=None, role=None):
     """ 
    自定义jwt认证成功返回数据 :token 
    返回的jwt :user 当前登录的用户信息[对象]
     :request 当前本次客户端提交过来的数据 :role 角色 
    """ 
    if user.first_name:
          name = user.first_name 
    else:
    name = user.username 
        return {
               'authenticated': 'true',
               'id': user.id, "role": role, 
               'name': name,
                'username': user.username,
                'email': user.email, 
                'token': token, 
    }     
  • 相关阅读:
    Java实现各种内部排序算法
    Java实现堆排序(大根堆)
    Java对象的序列化和反序列化
    Java实现链式存储的二叉查找树(递归方法)
    337. House Robber III(包含I和II)
    318. Maximum Product of Word Lengths
    114. Flatten Binary Tree to Linked List
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    96. Unique Binary Search Trees(I 和 II)
  • 原文地址:https://www.cnblogs.com/spbyyy/p/13771019.html
Copyright © 2011-2022 走看看