开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第27天,点击查看活动详情
一、前言
上一篇我们实现了用户登录的验证并返回token。那如何去校验请求的token(校验请求接口的用户是否有效)是否有效呢?这篇内容将为你讲解通过DRF,如何实现token的验证。
二、token的验证使用
1. 如何校验token是否有效
1)配置校验方式
在settings.py
文件中,我们加入下面的代码将用户验证改为token验证:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
]
}
2)通过restframework提供的permission_classes
来验证用户
1.在用户模块下的views.py
中引入api_view
、permission_classes
以及权限IsAuthenticated
:
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
2.然后在需要的视图方法上加入该装饰器即可 ,比如下面是对登录成功的用户做校验:
@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def check_token(request):
"""
验证token是否有效
"""
return Response(data={'msg': 'token有效!'})
另外permission_classes
还提供了对用户权限校验的方法(很基础),比如只允许管理员访问:
@api_view(['POST'])
@permission_classes((IsAdminUser,))
def check_token(request):
"""
验证token是否有效
"""
return Response(data={'msg': 'token有效!'})
还有下面这些可供选择:
AllowAny(所有人都可访问,未携带token也可,游客权限)
、
IsAuthenticatedOrReadOnly(通过验证的或者是只读接口)
当然,我们还可以自定义权限验证,后面的章节会讲到。
2. 携带token进行接口请求
我们直接在请求头(header)中指定Authorization
,值为Token 具体的token
即可:
四. 总结
至此,我们已经完成了用户的token验证。能够在需要鉴权的接口中,通过加入装饰器的方式来鉴定是否是有效用户的访问请求,实现起来非常的方便简单。
当然还有更简单的方式,我们可以配置DRF的中间件REST_FRAMEWORK
来对全局接口进行设置,这样就不需要每个接口都添加一次了,如下图所示:
REST_FRAMEWORK = {
# 下面的配置就是配置全局的请求校验
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticatedy',
),
'DEFAULT_AUTHENTICATION_CLASSES': [
'LimApi.limAuthentication.LimTokenAuthentication',
],
'DEFAULT_FILTER_BACKENDS': [
'django_filters.rest_framework.DjangoFilterBackend', 'rest_framework.filters.OrderingFilter',
'LimApi.limFilterBackends.QueryOnlyFields'],
'DEFAULT_PAGINATION_CLASS': 'LimApi.limPagination.StandardPageNumberPagination',
'EXCEPTION_HANDLER': 'LimApi.limExceptionHandler.response_exception_handler'
}
这样的设置减少了大量重复性的代码,只能说太香了。 下一章将通过视图的方式来完成用户的增删改查接口。