Django已登录状态下request.user返回AnonymousUser问题求助
问题排查与解决方案
核心原因
- 你提供的接口是M-Pesa的异步回调接口,该请求由M-Pesa官方服务器主动发起,而非已登录的用户端发起,请求不携带你站点的用户身份凭证,因此Django无法识别登录身份,
request.user固定返回AnonymousUser,属于正常逻辑。 - 代码本身存在语法错误:
Mpesa.objects.create方法中Paid_user=request.user行末尾缺少逗号,运行时会直接抛出语法异常,需先补全。
其他可能原因(非当前回调场景适用)
- 视图未配置登录校验规则:函数视图未添加
@login_required装饰器、类视图未继承LoginRequiredMixin时,未登录用户访问也会返回AnonymousUser。 - 认证配置异常:
settings.py中身份认证类配置错误,或者前端请求未正确携带认证凭证(如JWT的Authorization头、会话Cookie等),也会导致用户身份识别失败。
适配当前回调场景的解决方案
因为第三方回调无法直接获取用户身份,你需要通过支付标识关联用户:
- 在用户登录后发起支付请求的接口中,生成唯一的商户订单号,将订单号、当前登录用户ID、支付金额等信息预存入支付流水表,同时将订单号作为
AccountReference参数传递给M-Pesa的下单接口。 - 回调处理时,从返回参数中取出M-Pesa回传的
AccountReference或CheckoutRequestID字段,匹配预存的支付流水表获取对应的用户ID,再赋值给Mpesa模型的Paid_user字段即可。
内容的提问来源于stack exchange,提问作者Josphat Gitogo
相关产品推荐
相关产品推荐

