自动化测试平台(四):如何校验token的有效性

70 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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_viewpermission_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'
}

这样的设置减少了大量重复性的代码,只能说太香了。 下一章将通过视图的方式来完成用户的增删改查接口。