Возможно ли использовать 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"),
]