You need to enable JavaScript to run this app. django-graphql-jwt使用@login_required报GraphQLLocatedError 测试正常
优惠活动
大模型
产品
解决方案
定价
更多

django-graphql-jwt使用@login_required报GraphQLLocatedError 测试正常

问题核心原因

你遇到的权限报错完全来自配置项的拼写错误。
在settings.py的GRAPHENE配置块中,中间件配置的键名拼写少了一个字母e,写为MIDDLWARE,正确的键名应为MIDDLEWARE。Graphene加载配置时只会识别标准拼写的MIDDLEWARE键,你写错的键名会被直接忽略,导致graphql_jwt.middleware.JSONWebTokenMiddleware根本没有被加载执行。

对应现象的逻辑解释
  • 内置JWT接口(getTokenAuth、VerifyToken、RefreshToken)可以正常工作,是因为这些接口的实现自带独立的Token解析逻辑,不依赖Graphene全局中间件的执行,不受配置拼写错误的影响。
  • 单元测试可以正常通过,是因为JSONWebTokenTestCase是在测试客户端层面直接完成用户认证注入的,不经过Graphene层的中间件流程,即便中间件没有加载,测试流程也能正常拿到已认证用户的信息。
  • 实际Postman请求时报权限不足,是因为中间件未加载的情况下,系统无法从你请求头携带的Authorization: Bearer <token>内容中解析出对应用户,也不会把用户信息绑定到info.context上。@login_required装饰器检查时发现上下文里的用户是未认证的匿名对象,就抛出了权限不足的错误。
修复方法

修正settings.py中GRAPHENE配置的拼写错误即可,修正后的完整配置如下:

GRAPHENE = {
    "SCHEMA": "myproject.graphql.api.schema",
    "MIDDLEWARE": [
        "graphql_jwt.middleware.JSONWebTokenMiddleware",
    ],
}

修正后重启Django服务,再次携带有效Token发请求即可正常访问加了@login_required装饰器的查询。可以在resolve_hello方法中打印info.context.user做验证,修正前输出为匿名用户,修正后会输出Token对应的已登录用户对象。


内容的提问来源于stack exchange,提问作者Jocho Delgado

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.02 14:54:00