我使用 python-social-auth 和 Django 使用 Oauth2 (google-oauth2) 向 Google 进行身份验证。在我的模板中,我使用类似:
<a href="{% url "begin:social" "google-oauth2" %}">Login</a>
它正确地创建了一个A
指向正确登录 url 的元素。问题是,djangorunserver
在 Apache 后面使用ProxyPass
and选项运行ProxyPassReverse
(也尝试使用 nginxproxy_pass
选项,而不是 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
,在这里,我可以看到
self.auth_complete_params(self.validate_state())
向谷歌发送同样的错误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
)
所以,这是我目前的解决方案。我只是不明白如何以更优雅的方式或“正确”的方式做到这一点。
有什么帮助吗?
最好的