JWT安装配置
1.1 安装JWT
|
1
|
pip install djangorestframework-jwt==1.11.0 |
1.2 syl/settings.py 配置jwt载荷中的有效期设置
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 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进行认证权限配置
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# 在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接口
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from django.urls import include, pathfrom rest_framework.authtoken.views import obtain_auth_tokenfrom user import viewsfrom rest_framework.routers import SimpleRouter, DefaultRouterfrom 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
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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_nameelse: name = user.usernamereturn { 'authenticated': 'true', 'id': user.id, "role": role, 'name': name, 'username': user.username, 'email': user.email, 'token': token,} |

浙公网安备 33010602011771号