Pra*_*mod 5 django google-oauth django-allauth
我从google cloud api控制台创建了一个客户端ID和客户端密钥,并在社交应用表中添加了一条记录django-allauth
我还补充说WEB ORIGIN:
mysite.com (PROD)http://localhost:8000 (DEV)和 REDIRECT URI
http:mysite.com/accounts/google/login/callback/ (PROD)localhost:8000/accounts/google/login/callback/ (DEV)在谷歌api控制台.
使用Google登录可以很好地进行开发,并在成功登录时重定向到localhost回调网址.但是我redirect_uri_mismatch在生产中遇到了错误.
这些是谷歌错误页面中的错误详细信息:
请求详情
cookie_policy_enforce=false
scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
access_type=online
redirect_uri=http://127.0.0.1:8000/accounts/google/login/callback/
state=SOME_RANDOM_NUMBER
display=page
client_id=MY_CLIENT_ID
Run Code Online (Sandbox Code Playgroud)
在redirect_uri仍设置为127.0.0.1代替http:mysite.com/accounts/google/login/callback/
那么我该如何设置正确的redirect_uri呢?
这是我settings.py关于django-allauth
INSTALLED_APPS = (
#the usual stuff
'allauth',
'allauth.account',
'allauth.socialaccount',
'allauth.socialaccount.providers.google',
)
import django.conf.global_settings as DEFAULT_SETTINGS
TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",
)
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
)
ACCOUNT_EMAIL_REQUIRED = True
LOGIN_REDIRECT_URL = "/"
Run Code Online (Sandbox Code Playgroud)
这里的 urls.py
urlpatterns = patterns('',
url(r'^accounts/', include('allauth.urls')),
)
Run Code Online (Sandbox Code Playgroud)
我没有做任何其他django-allauth设置.我看到了文档,无法找到进行更改的位置.
我发现问题的发生是因为位于python app服务器前面的nginx代理将HTTP Host标头设置为localhost.
所以当allauth试图做的时候request.build_absolute_uri,HTTP_HOST是localhost.
所以我proxy_set_header在nginx配置文件中设置了修复问题的设置.
proxy_set_header Host $http_host;
Run Code Online (Sandbox Code Playgroud)
另请参阅Facebook oauth身份验证重定向到localhost而不是我的域中的同一问题在不同的头像中.
| 归档时间: |
|
| 查看次数: |
2613 次 |
| 最近记录: |