gpt4 book ai didi

使用 Django 服务器主机名和监听端口作为 redirect_uri 的 Python-social-auth

转载 作者:行者123 更新时间:2023-11-28 16:40:40 25 4
gpt4 key购买 nike

我将 python-social-auth 与 Django 结合使用,以使用 Oauth2 (google-oauth2) 向 Google 进行身份验证。在我的模板中,我使用了一些东西 like :

<a href="{% url "begin:social" "google-oauth2" %}">Login</a>

并且它正确地创建了一个指向正确登录 url 的 A 元素。问题是,django 正在使用 proxyPassProxyPassReverse 在 Apache 后面使用 runserver 选项运行(也尝试使用 proxy_pass 的 nginx选项,而不是 fcgi)。

在这种情况下,我有两个问题;首先,在创建身份验证请求时,python-social-auth 将参数 redirect_uri 作为 localhost:8000 发送,所以我在 settings.py 上这样做了:

AUTH_EXTRA_ARGUMENTS = {'redirect_uri': 'http://myapp.com'}

如果我将 localhost:8000 作为 redirect_uri 发送,它会绕过 Google 返回的“错误请求”响应。

然后,在 python-social-auth oauth.py 中,here , 我可以看到

self.auth_complete_params(self.validate_state())

正在向 Google 发送相同的错误 redirect_uri。所以我做了一些丑陋的事情:

data = self.auth_complete_params(self.validate_state())
data['redirect_uri'] = 'http://myapp.com'
response = self.request_access_token(
self.ACCESS_TOKEN_URL,
data=data, # ugh!
headers=self.auth_headers(),
method=self.ACCESS_TOKEN_METHOD
)

所以,这就是我目前的解决方案。我只是不明白如何以更优雅的方式或“正确”的方式做到这一点。

有什么帮助吗?

最佳

最佳答案

如果我做对了,问题是 python-social-auth 正在创建错误的 redirect_uri 以发送给 auth 提供者。它总是发送 http://localhost:8000/my-login-page 但你希望它发送 http://myapp.com/my-login-page

指定重定向 URI 的正确位置在 settings.py 中:

SOCIAL_AUTH_LOGIN_REDIRECT_URL = 'http://myapp.com/my-login-url'

和特殊情况的类似设置(例如 SOCIAL_AUTH_NEW_USER_REDIRECT_URL)。然后,你需要告诉 python-social-auth 让你更改域,否则它会强制域返回到 localhost:8000。这样做:

SOCIAL_AUTH_SANITIZE_REDIRECTS = False

(也可以通过提示其 build_absolute_uri() 方法使用哪个域来在整个 Django 中修复此问题。这涉及到您的更多部分堆栈,但在 this answer 中检查它。

关于使用 Django 服务器主机名和监听端口作为 redirect_uri 的 Python-social-auth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19684715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com