Возможно ли использовать EmailAuth от python-social-auth с drf-social-oauth2 для регистрации

В моем проекте есть аутентификация через facebook, и я настроил несколько конвейеров. Поэтому было бы неплохо, чтобы регистрация по электронной почте, не связанная с социальными сетями, также использовала эти конвейеры.

Я попробовал добавить EmailAuth в список бэкендов аутентификации, но я не знаю, какой вид теперь использовать для регистрации.

Итак, возможно ли (или целесообразно ли) использовать EmailAuth с drf-social-oauth2 для несоциальной регистрации, и если да, то как это сделать?

Вы можете интегрировать аутентификацию по электронной почте с drf-social-oauth2, добавив ее в AUTHENTICATION_BACKENDS и используя те же конвейеры аутентификации.

Поскольку в drf-social-oauth2 отсутствует собственное представление регистрации по электронной почте, создайте пользовательскую конечную точку API, которая регистрирует пользователей вручную и проверяет их подлинность через серверную часть электронной почты. Затем укажите это представление в своих URL-адресах

settings.py

AUTHENTICATION_BACKENDS = (
    'social_core.backends.email.EmailAuth',  # The email-based autentication
    'social_core.backends.facebook.FacebookOAuth2',  # Facebook login
    'django.contrib.auth.backends.ModelBackend',  # Default auth backend
)

просмотр пользовательской регистрации

# Other imports ..
from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_201_CREATED
from social_django.utils import load_backend, load_strategy

class EmailRegisterView(APIView):
    def post(self, request):
        email = request.data.get("email")
        password = request.data.get("password")

        if not email or not password:
            return Response({"error": "Email & pass required"}, HTTP_400_BAD_REQUEST)

        user, created = User.objects.get_or_create(email=email, defaults={"username": email})
        if created:
            user.set_password(password)
            user.save()
        strategy = load_strategy(request)
        backend = load_backend(strategy, "email", redirect_uri=None)
        user = backend.authenticate(request=request, email=email, password=password)
        return Response({"detail": "User registered successfully"}, HTTP_201_CREATED)

urls.py

urlpatterns = [
    # ...
    path("auth/register/email/", EmailRegisterView.as_view(), name="email_register"),
]
Вернуться на верх