8

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

我还补充说WEB ORIGIN

  1. mysite.com (产品)
  2. http://localhost:8000 (开发)

REDIRECT URI

  1. http:mysite.com/accounts/google/login/callback/ (产品)
  2. localhost:8000/accounts/google/login/callback/ (开发)

在谷歌 api 控制台中。

使用 Google 登录在开发中效果很好,并在成功登录时重定向到 localhost 回调 url。但是我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

redirect_uri仍然设置为而127.0.0.1不是http:mysite.com/accounts/google/login/callback/

那么如何设置正确的redirect_uri呢?

这是我settings.pydjango-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 = "/"

这里是urls.py

urlpatterns = patterns('',

  url(r'^accounts/', include('allauth.urls')),

)

我没有进行任何其他django-allauth设置。我看到了文档,但找不到在哪里进行更改。

4

1 回答 1

18

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

所以当allauth尝试做的时候request.build_absolute_uriHTTP_HOST就是localhost

proxy_set_header所以我在解决问题的nginx 配置文件中设置了设置。

proxy_set_header Host $http_host;

另请参阅Facebook oauth authentication is redirecting to localhost 而不是我的域,以解决不同头像中的相同问题。

于 2013-11-15T00:30:14.020 回答