如何在graphene-django的resolve方法中获取已认证用户?返回空且无日志输出
问题分析与解决方案
嘿,我一眼就发现了一个核心问题,先帮你解决这个,再排查其他潜在可能性:
1. Resolve函数命名不匹配(最可能的根因)
你定义的字段是me = graphene.Field(UserType),但对应的resolve函数命名是resolve_user——Graphene的规则是resolve函数必须以resolve_<字段名>命名,所以这里应该改成resolve_me才对!
修改后的代码如下:
me = graphene.Field(UserType) def resolve_me(root, info): logger.info("***** Inside resolve ****") return info.context.user
因为Graphene会自动寻找与字段名对应的resolve函数,现在它找不到resolve_me,所以根本不会执行你写的resolve_user,自然日志没输出,返回null。
2. 确认Query类已正确注册到Schema
检查你的Schema定义,确保Query类被正确关联:
schema = graphene.Schema(query=Query)
如果Query没被注册,这个me字段根本不会被暴露在GraphQL接口中,请求时自然返回null。
3. 验证认证上下文是否正确传递
虽然你说已经完成认证且有Cookie,但要确认info.context.user确实是已认证的用户,而不是AnonymousUser:
- 可以在GraphQL视图中添加调试代码,先打印请求的用户:
from graphene_django.views import GraphQLView class CustomGraphQLView(GraphQLView): def execute_graphql_request(self, request, data, query, variables, operation_name, show_graphiql=False): print("当前请求用户:", request.user) print("是否认证:", request.user.is_authenticated) return super().execute_graphql_request(request, data, query, variables, operation_name, show_graphiql) - 然后在urls.py中替换原来的GraphQLView为这个自定义视图,发起请求后看控制台输出,确认用户已被正确认证。
4. 检查UserType的配置正确性
你的UserType定义看起来没问题,但可以再确认两点:
- 确保
User模型是正确的(比如是Django默认的django.contrib.auth.models.User,还是你自定义的用户模型); - 确认
fields列表中的字段在User模型中都存在(Django默认User模型确实有id、name、email、username,不过如果是自定义模型要对应上)。
内容的提问来源于stack exchange,提问作者manu
相关产品推荐
相关产品推荐

