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, 
    }     
  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/spbyyy/p/13771019.html
Copyright © 2011-2022 走看看