Я пытаюсь научиться интегрировать социальную аутентификацию python в проект django.
Кажется, это работает, потому что я могу войти в свое тестовое приложение, но похоже, что пользователь никогда не сохраняется в базе данных, и я не могу понять, почему, так как я не получаю никаких ошибок.
вот моя конфа
INSTALLED_APPS = (
...
'social.apps.django_app.default',
'messaging'
)
AUTHENTICATION_BACKENDS = (
'social.backends.facebook.FacebookOAuth2',
'social.backends.email.EmailAuth',
'django.contrib.auth.backends.ModelBackend',
)
SOCIAL_AUTH_FACEBOOK_KEY='XX'
SOCIAL_AUTH_FACEBOOK_SECRET='YYY'
FACEBOOK_EXTENDED_PERMISSIONS = ['email']
SOCIAL_AUTH_FACEBOOK_SCOPE = ['email']
LOGIN_URL = '/login/'
LOGIN_REDIRECT_URL = '/home/'
LOGOUT_REDIRECT_URL = '/'
URL_PATH = ''
SOCIAL_AUTH_STRATEGY = 'social.strategies.django_strategy.DjangoStrategy'
SOCIAL_AUTH_STORAGE = 'social.apps.django_app.default.models.DjangoStorage'
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
)
Моя идея состоит в том, чтобы просто использовать модель по умолчанию django для пользователя, поэтому я не определил для нее никакого расширения.
У вас есть идеи, почему пользователи не создаются при входе в систему?
ОБНОВЛЕНИЕ
Я заметил нечто странное, по крайней мере, для меня. Первый пользователь-администратор, который создается при выполнении syncdb, имеет то же имя и фамилию, что и учетная запись facebook, которую я использую для тестирования приложения. Я думал, что он не будет использоваться и что нужно создать другого пользователя, но при проверке базы данных я увидел, что auth_user.last_login
был обновлен в соответствии с входом в систему, выполненным через facebook.
Итак, у меня есть два вопроса:
- правильно ли, что социальная аутентификация python проверяет, присутствует ли пользователь с тем же именем и фамилией в auth_user, а затем использует этого конкретного пользователя вместо создания другого?
- как я могу избежать ситуации, когда пользователь Foo Bar в Facebook и пользователь Foo Bar в Twitter не являются одним и тем же лицом?