django-allauth登录谷歌即使在生产中也会重定向到开发网址

Pra*_*mod 5 django google-oauth django-allauth

我从google cloud api控制台创建了一个客户端ID和客户端密钥,并在社交应用表中添加了一条记录django-allauth

我还补充说WEB ORIGIN:

  1. mysite.com (PROD)
  2. http://localhost:8000 (DEV)

REDIRECT URI

  1. http:mysite.com/accounts/google/login/callback/ (PROD)
  2. 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设置.我看到了文档,无法找到进行更改的位置.

Pra*_*mod 9

我发现问题的发生是因为位于python app服务器前面的nginx代理将HTTP Host标头设置为localhost.

所以当allauth试图做的时候request.build_absolute_uri,HTTP_HOSTlocalhost.

所以我proxy_set_headernginx配置文件中设置了修复问题的设置.

proxy_set_header Host $http_host;
Run Code Online (Sandbox Code Playgroud)

另请参阅Facebook oauth身份验证重定向到localhost而不是我的域中的同一问题在不同的头像中.