DRF JWT 在 OPTIONS 请求上不需要令牌

Posted

技术标签:

【中文标题】DRF JWT 在 OPTIONS 请求上不需要令牌【英文标题】:DRF JWT Don't require token on OPTIONS-requests 【发布时间】:2018-04-01 17:26:25 【问题描述】:

当用户执行 OPTIONS 请求时,如何让 JWT 不检查并要求令牌?

我已经定义了自己的options(self, request, *args, **kwargs) 方法,但是只要启用permission_classes = [isAuthenticated],就会要求用户提供登录凭据...

我们在 React 中用于与 DRF 交互的 API 必须执行一个 OPTION-request,它不包含任何标头。当它没有返回 200 代码时,它不会执行对服务器的实际请求...

【问题讨论】:

【参考方案1】:

我认为最简单的方法是声明custom permissions并使用它(在permissions.py文件中):

from rest_framework import permissions

class IsAuthenticated(permissions.IsAuthenticated):

    def has_permission(self, request, view):
        if request.method == 'OPTIONS':
            return True
        return super(IsAuthenticated, self).has_permission(request, view)

并在设置中将DEFAULT_AUTHENTICATION_CLASSES 更改为此类...

【讨论】:

请提供错误信息,我认为你的正确方法是覆盖JSONWebTokenAuthenticationget_jwt_value method 没有错误代码,我只收到带有“详细信息”的 401 响应:“未提供身份验证凭据。”来自智威汤逊。 第93行条件生成的消息我认为你可以覆盖它,我添加到答案示例中。 恐怕这也不起作用。从源代码中可以看出,这些函数都没有返回““详细信息”:“未提供身份验证凭据。”作为 401 旁边的消息... 如此处所示,错误消息未列在 JWT 消息文件中:github.com/GetBlimp/django-rest-framework-jwt/blob/master/…

以上是关于DRF JWT 在 OPTIONS 请求上不需要令牌的主要内容,如果未能解决你的问题,请参考以下文章

drf-jwt手动签发与校验与drf小组件

drf_jwt手动签发与校验-drf小组件:过滤-筛选-排序-分页

drf-jwt手动签发与校验

请求的资源上不存在“Access-Control-Allow-Origin”标头,并且 JWT 令牌在 put 方法上不以 Bearer String 开头

Spring Security Jwt Token在请求表单角度时允许所有Options方法

DRF JWT使用