使用Django服务器主机名和侦听端口作为redirect_uri的Python-social-auth
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了使用Django服务器主机名和侦听端口作为redirect_uri的Python-social-auth,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1748字,纯文字阅读大概需要3分钟。
内容图文
我正在将python-social-auth与Django一起使用Oauth2(google-oauth2)与Google进行身份验证.在我的模板中,我使用like:
<a href="{% url "begin:social" "google-oauth2" %}">Login</a>
并正确创建一个指向正确登录URL的A元素.事实是,django在带有ProxyPass和ProxyPassReverse的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())
正在将相同的错误redirect_uri发送给Google.所以我做了一些丑陋的事情:
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全部内容,希望文章能够帮你解决使用Django服务器主机名和侦听端口作为redirect_uri的Python-social-auth所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。