Социальная аутентификация Django с использованием данных Facebook - PullRequest
4 голосов
/ 19 февраля 2012

Мне удалось установить django-social-auth, но я упускаю момент, когда я действительно могу использовать данные, полученные из facebook, чтобы создать имя пользователя и, возможно, использовать изображение профиля или поле about ...

Я знаю, что в настройках django-social-auth я могу установить SOCIAL_AUTH_DEFAULT_USERNAME = 'new_social_auth_user' и FACEBOOK_EXTENDED_PERMISSIONS = [...], но я не понимаю, где в моем коде я могу подключить эти данные, поэтомуне иметь случайных имен пользователей.

1 Ответ

13 голосов
/ 20 февраля 2012

django-social-auth реализует конвейер (это, кажется, новая функция, которой не было, когда я ее пробовал), которая позволяет вам вставлять пользовательские функции на определенных этапах процесса аутентификации.Проверьте документы здесь и пример функции трубопровода здесь.

Таким образом, вы можете написать функцию:

SOCIAL_AUTH_PIPELINE = (
    'social_auth.backends.pipeline.social.social_auth_user',
    'social_auth.backends.pipeline.associate.associate_by_email',
    'social_auth.backends.pipeline.user.get_username',

    'app.pipeline.custom_create_user',

    'social_auth.backends.pipeline.social.associate_user',
    'social_auth.backends.pipeline.social.load_extra_data',
    'social_auth.backends.pipeline.user.update_user_details'
)

, где ваша custom_create_user функция оборачивает значение по умолчанию create_user и создает имя пользователя в соответствии с вашими потребностями:

from social_auth.backends.pipeline.user import create_user
def custom_create_user(request, *args, **kwargs):
     user = *kwargs.get('user', None)
     # Do something with username
     return create_user(request, args, kwargs)
...