You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 18:37:48