Я хочу создать самый простой способ входа в систему для пользователей моего сайта Django. Я представляю себе что-то вроде:
- Экран входа в систему представлен пользователю
- Пользователь выбирает логин с Facebook или Google
- Пользователь вводит пароль на внешнем сайте
- Пользователь может взаимодействовать с моим сайтом в качестве аутентифицированного пользователя.
Хорошо, эта часть проста, просто установите django-allauth и настройте ее.
Но я также хочу дать возможность использовать сайт с локальным пользователем. Это будет еще один шаг:
- Экран входа в систему представлен пользователю
- Пользователь выбирает регистрацию
- Пользователь вводит учетные данные
- Сайт отправляет электронное письмо с подтверждением
- Пользователь щелкает по электронной почте и может взаимодействовать с моим сайтом в качестве аутентифицированного пользователя.
Хорошо, и аутентификация по умолчанию, и allauth могут это сделать. Но теперь вопрос в миллион долларов.
Если они меняют способ входа в систему, как я могу автоматически связать свои аккаунты Google, FB и локальные аккаунты?
Посмотрите, как они заходят, у меня есть адрес электронной почты. Можно ли это сделать, используя django-allauth? Я знаю, что могу сделать это с помощью пользовательского вмешательства. Сегодня поведение по умолчанию заключается в том, чтобы отказаться от входа в систему, заявив, что письмо уже зарегистрировано.
Если это невозможно сделать только с настройкой, я согласен с ответом, который дает мне некоторую ориентацию, какие изменения следует внести в allauth-код для поддержки этого рабочего процесса.
Есть много причин для этого. Пользователи забудут, какой метод они использовали для аутентификации, и иногда будут использовать Google, иногда FB, а иногда и локальную учетную запись пользователя. У нас уже есть много локальных учетных записей пользователей, а социальные учетные записи станут новой функцией. Я хочу, чтобы пользователи сохраняли свою личность. Я предвижу возможность запросить список друзей пользователей, поэтому, если они вошли в систему с помощью Google, я бы тоже хотел иметь свою учетную запись FB.
Это сайт для хобби, там нет больших требований безопасности, поэтому, пожалуйста, не отвечайте, что это не разумная реализация безопасности.
Позже я создам пользовательскую модель, чтобы иметь только адрес электронной почты в качестве идентификатора входа. Но я буду доволен ответом, который просто позволит мне автоматически связывать учетные записи модели пользователя по умолчанию, которая имеет требуемое имя пользователя.
Я использую Django == 1.5.4 и django-allauth == 0.13.0