Разрешить пользователю регистрироваться с помощью django-all-auth, даже если социальная учетная запись существует, а затем автоматически подключить их - PullRequest
1 голос
/ 17 марта 2019

Итак, я смог подключить социальные учетные записи (fb или google) для подключения к локальной учетной записи электронной почты, если она уже существует.

Однако мне также нужна обратная функциональность, т.е. я хотел быразрешить пользователю регистрироваться, даже если социальная учетная запись (Google или FB) существует.В настоящее время он говорит:

{Пользователь уже зарегистрирован с этим адресом электронной почты}

Я использую django-all-auth и django-rest-auth с Django 2.1

1 Ответ

0 голосов
/ 18 марта 2019

Да, вы можете сделать это. Вы должны изменить конечную точку сброса пароля , предоставленную django-rest-auth, чтобы установить пароль, а затем сможете войти в систему:

from django.contrib.auth import get_user_model
from django.contrib.auth.forms import PasswordResetForm as DjangoPasswordResetForm
from rest_auth.serializers import (
    PasswordResetSerializer as RestAuthPasswordResetSerializer
)
from rest_auth.views import PasswordResetView as RestAuthPasswordResetView

UserModel = get_user_model()


class PasswordResetForm(DjangoPasswordResetForm):
    def get_users(self, email):
        """
        Given an email, return matching user(s) who should receive a reset.
        """
        active_users = UserModel._default_manager.filter(**{
            '%s__iexact' % UserModel.get_email_field_name(): email,
            'is_active': True,
        })
        return iter(active_users)
        # or (u for u in active_users if not u.has_usable_password())


class PasswordResetSerializer(RestAuthPasswordResetSerializer):
    password_reset_form_class = PasswordResetForm


class PasswordResetView(RestAuthPasswordResetView):
    serializer_class = PasswordResetSerializer

Вы можете добавить это представление в urls.py в качестве общей конечной точки для сброса паролей (не забудьте разместить ее перед URL-адресами rest_auth s) или в качестве дополнительной конечной точки для установки паролей (см. Строку с комментариями). Затем вы можете добавить заметку на свою страницу регистрации, которая ссылается на вашу страницу и обслуживает вашу новую конечную точку.

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

Вы также можете отправить электронное письмо со ссылкой через send_confirmation, чтобы установить пароль, когда пользователь пытается зарегистрироваться, и электронное письмо уже существует (или только в том случае, если этот пользователь имеет социальный аккаунт). Если хотите, я могу добавить пример, как это сделать.

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