0

[Django 1.5.1]Джанго - Интеграция Джанго-профили (и Джанго регистрации) с Джанго-Facebook

Я настроил django-profiles и django-registration для моего небольшого участка таким образом, что вовлекает 'обычай' так что во время регистрации новый пользователь заполняет поля имени пользователя, пароля и профиля за один раз. Но теперь я пытаюсь разрешить пользователям входить в систему с помощью Facebook и пытаться использовать django-facebook. Насколько я понимаю, вход в систему через вход в Facebook через django-facebook будет аутентифицировать кого-то, но это не создаст объект пользователя или объект профиля.

Таким образом, идея, которую я имел в виду, - добавить дополнительное поле профиля, которое содержит потенциальный Facebook-идентификатор пользователя (который, как я считаю, уникален), если они хотят использовать Facebook. Затем принудительно проверяйте каждый шаблон, если у пользователя есть профиль или нет, а если нет, направить их на страницу «создать профиль». Затем всякий раз, когда пользователь регистрируется через вход в Facebook, он каким-то образом связывает свою сессию с соответствующим объектом профиля, который соответствует идентификатору Facebook (и, следовательно, объекту пользователя, соответствующему объекту профиля). Я думаю, что мне придется применить фильтр, а затем создать «сигнал», но я не слишком уверен, как это сделать.

Это звучит очень запутанно. Как я смогу добиться этого правильно?

ответ

0

Вот как я предлагаю вам делать что-то. Уберите с django-facebook и посмотрите на django-allauth. Он будет обрабатывать счета (регистрация, логика, подключение социальных счетов).

Кроме того, у django-профилей много проблем с 1.5+ для меня, и я не беспокоюсь об этом и вместо этого создаю собственное приложение профилей и модель UserProfile с любыми дополнительными полями, которые не будут обрабатываться django-allauth.

Пример одного из моих реализаций

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    default_address = models.OneToOneField(Address, blank=True, null=True) 
    default_tshirt_size = models.CharField(blank=True, null=True, choices=constants.tshirt_sizes, max_length=50) 
    default_shoe_size = models.CharField(blank=True, null=True, choices=constants.shoe_sizes, max_length=50) 

Ваша модель профиля пользователя должен быть направлен к одной и той же модели пользователя allauth используется.

from allauth.utils import get_user_model 
User = get_user_model() 

Вот аккуратный метод, который я использую для автоматического создания профиля пользователя, если он еще не был.

User.profile = property(lambda u: UserProfile.objects.get_or_create(user=u)[0]) 

Затем просто создайте класс формы регистрации с помощью метода save(), который принимает пользователя как аргумент. Ссылка на этот класс в файле настроек.

ACCOUNT_SIGNUP_FORM_CLASS = 'yourproject.yourapp.forms.SignupForm' 

Посмотреть этот пост для нескольких соответствующего примера, за исключением, конечно, с вашей реализацией вы, вероятно, хотите получить UserProfile на основе user.id в этой точке, и сохранить дополнительные значения в профиль пример.

How to customize user profile when using django-allauth

+0

Большое спасибо за ответ! Наверное, я мог бы заглянуть в django-allauth вместо этого, но на моем сайте уже есть несколько существующих пользователей, и я уже настроил свой собственный класс userprofiles вместе с django-профилями и django-registration ... Есть ли еще какие- грязный способ для меня интегрировать Facebook с django-allauth? Еще раз спасибо! – Stylex