Social-auth AuthCanceled ошибка после перенаправления с facebook - PullRequest
0 голосов
/ 04 апреля 2019

Я настроил social-auth-app-django в производстве.Но после перенаправления facebook я получил AuthCanceled и все еще не смог заставить его работать.

В моей модели пользователя адрес электронной почты, используемый для регистрации.Это моя модель пользователя:

class User(AbstractUser):
    email = models.EmailField(_('email address'), unique=True)
    avatar = models.ImageField(blank=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

в settings.py:

MIDDLEWARE = [
    ...
    'social_django.middleware.SocialAuthExceptionMiddleware',
]

TEMPLATES = [
    ...
        'context_processors': [
            ...
            'social_django.context_processors.backends',
            'social_django.context_processors.login_redirect',
    ],
]

AUTHENTICATION_BACKENDS = (
    'social_core.backends.facebook.FacebookOAuth2',
    'accounts.backends.ModelBackend'
)

LOGIN_URL = '/'
LOGOUT_URL = '/'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'

SOCIAL_AUTH_FACEBOOK_KEY = '..'  # App ID
SOCIAL_AUTH_FACEBOOK_SECRET = '...'  # App Secret
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
    'fields': 'id,name,email',
}

SOCIAL_AUTH_PIPELINE = (
    'social_core.pipeline.social_auth.social_details',
    'social_core.pipeline.social_auth.social_uid',
    'social_core.pipeline.social_auth.auth_allowed',
    'social_core.pipeline.social_auth.social_user',
    'social_core.pipeline.user.get_username',
    'social_core.pipeline.user.create_user',
    'social_core.pipeline.social_auth.associate_user',
    'social_core.pipeline.social_auth.load_extra_data',
    'social_core.pipeline.user.user_details',
)

Действительные URI перенаправления OAuth в приложении входа в Facebook: https://example.com/oauth/complete/facebook/

Спасибо заваше время и помощь.

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

Для тех, кто приземлился на этот вопрос, после обсуждения темы с OP по электронной почте проблема была вызвана неправильной сборкой redirect_uri при замене code на access_token.

Неправильная сборка этого URI была вызвана тем, что бэкэнд Django находится за Nginx, но ему не были переданы надлежащие заголовки (X-Forwarded-For и Host), поэтому Django не знал о нужном хосте, это были запросы на обслуживание так как, в конце концов, URL указывали на localhost вместо предполагаемого домена.

0 голосов
/ 07 апреля 2019

Для меня все работает как шарм: Facebook, Google, Twitter и github. Это может быть проблема конфигурации.

Вот как я все настроил (примечание: я нахожусь в режиме developer в Facebook, но он отлично работает с моими 2 учетными записями), я надеюсь, что это может помочь:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'social_django',
    'compressor',
    'app',
)

MIDDLEWARE = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'social_django.middleware.SocialAuthExceptionMiddleware',
)

AUTHENTICATION_BACKENDS = (
    'social_core.backends.google.GoogleOAuth2',
    'social_core.backends.facebook.FacebookOAuth2',
    'social_core.backends.twitter.TwitterOAuth',
    'social_core.backends.github.GithubOAuth2',

    'django.contrib.auth.backends.ModelBackend',
)

# https://simpleisbetterthancomplex.com/
# tutorial/2016/10/24/how-to-add-social-login-to-django.html
SOCIAL_AUTH_GITHUB_KEY = 'xxx'
SOCIAL_AUTH_GITHUB_SECRET = 'xxx'

SOCIAL_AUTH_TWITTER_KEY = 'xxx'
SOCIAL_AUTH_TWITTER_SECRET = 'xx'

SOCIAL_AUTH_FACEBOOK_KEY = 'xxxx'
SOCIAL_AUTH_FACEBOOK_SECRET = 'xxx'
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {
  'fields': 'name, email, age_range'
}

SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = 'xxx'
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = 'xxx'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...