Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest框架&x2B;React JWT身份验证,403在受保护视图上禁止_Django_Reactjs_Django Rest Framework_Jwt Auth - Fatal编程技术网

Django Rest框架&x2B;React JWT身份验证,403在受保护视图上禁止

Django Rest框架&x2B;React JWT身份验证,403在受保护视图上禁止,django,reactjs,django-rest-framework,jwt-auth,Django,Reactjs,Django Rest Framework,Jwt Auth,我正试图用DRF+react创建一个CRUD网站,我在某种程度上遵循了本教程的认证要求 (由于我使用DRF并完全独立地进行反应,因此存在一些差异) 身份验证很好,我已经可以登录、注销和注册,但是任何需要“IsAuthenticated”权限的视图都会给我一个403禁止,我也尝试通过postman使用标题获取数据: 接受:application/json 授权:JWT“myaccesstoken” 但我也得到了一个403,上面写着“detail”:“您没有执行此操作的权限。” 下面是一些代码 S

我正试图用DRF+react创建一个CRUD网站,我在某种程度上遵循了本教程的认证要求

(由于我使用DRF并完全独立地进行反应,因此存在一些差异)

身份验证很好,我已经可以登录、注销和注册,但是任何需要“IsAuthenticated”权限的视图都会给我一个403禁止,我也尝试通过postman使用标题获取数据: 接受:application/json 授权:JWT“myaccesstoken” 但我也得到了一个403,上面写着“detail”:“您没有执行此操作的权限。”

下面是一些代码

Settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication', (#I've already tried commenting out basic and session auth)
    )
}

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=14),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,
    'AUTH_HEADER_TYPES': ('JWT ',),
    'USER_ID_FIELD': 'username',
    'USER_ID_CLAIM': 'user_id',
    'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
    'TOKEN_TYPE_CLAIM': 'token_type',
}

CORS_ORIGIN_ALLOW_ALL = True
以及受保护的视图

views.py
class PostList(generics.ListCreateAPIView):
    permission_classes = (IsAuthenticated,) (#I've tried with or without this)
    authentication_classes = () (# if i take this out i get a 401 insteand of a 403)
    queryset = Post.objects.all()
    serializer_class = PostSerializer

我没有显示任何react代码,因为我认为问题出在DRF部分,因为我也无法在PostMan上成功地发出GET请求,如果我将设置更改为AllowAny,我可以在两个位置发出GET请求,这很好

我也有同样的问题。对于默认身份验证(特别是REST\u FRAMEWORK\u simplejwt),REST\u框架设置似乎不起作用。我不知道为什么

尝试直接将JWTAuthentication类导入您的authentication\u classes元组,如:

来自rest\u framework\u simplejwt.authentication导入JWTAuthentication
类PostList(generics.ListCreateAPIView):
权限\类=(已验证,)
认证\类=(JWTAuthentication)
queryset=Post.objects.all()
序列化程序\u类=后序列化程序

乍一看,我发现您与本教程的区别在于,在
'AUTH\u HEADER\u TYPES'
下,您在
'JWT'
中添加了一个空格,而它们没有包含空格。不是100%确定这是否会解决您的问题,但据我所知,HTTP头中的空格确实很重要。只是更改了它,但我得到了相同的错误嘿!感谢您回答我的老问题,我已经放弃了那个项目,所以我没有那个旧代码,但我现在正在做另一个尝试相同身份验证的项目,我刚刚通过使用dj rest auth包(可选地随简单jwt集成而来)实现了这一点!。