第三方重定向后,Django request.user 成为 AnonymousUser

Posted

技术标签:

【中文标题】第三方重定向后,Django request.user 成为 AnonymousUser【英文标题】:Django request.user become AnonymousUser after third party redirect 【发布时间】:2020-01-10 17:19:54 【问题描述】:

test.html:

<a href="https://auth.ebay.com/oauth2/authorize?    ...">authorize</a>

views.py:

from django.contrib.auth.decorators import login_required

@login_required
def myview(req):
    user = req.user

   return render(req, 'test.html')

对于 ebay 的 oauth 流程,您必须向用户提供指向 ebay 服务器的链接,该链接会询问用户是否要向您提供凭据。如果他们接受,ebay 会将用户重定向到给定的 url,其中包含访问密钥的查询字符串。

问题是,当我使用 ebay 授权我的应用程序时,用户会被重定向到我的登录页面(尽管已经登录)。如果我删除 @login_required 装饰器,req.user 将返回 AnonymousUser。这是一个问题,因为我不知道将访问令牌分配给哪个用户。

我在这里错过了什么?

注意,我正在使用 ngrok 为我的服务器建立隧道,我没有任何问题 呈现myview,而不是用户是匿名的。

【问题讨论】:

【参考方案1】:

问题在于,当我最初登录用户时,我使用的是域 localhost:8000 而不是我的 ngrok 实例。

使用我的 ngrok 地址登录我的用户解决了这个问题。

【讨论】:

侧边栏,但您可以使用 pyngrok 从 Python 应用程序轻松地以编程方式管理 ngrok。 Django 示例here,还展示了如何在开发服务器启动时更新 URL、webhook 等。

以上是关于第三方重定向后,Django request.user 成为 AnonymousUser的主要内容,如果未能解决你的问题,请参考以下文章

登录后 Django 重定向到仪表板

django - 注册用户后重定向到页面

Django注册:由于缺少参数,注册失败后重定向

如何配置在Django中注销后重定向到哪里?

如何配置在Django中注销后重定向到哪里?

django注册后如何将用户重定向到特定的url?