Да, вы можете сделать это. Вы должны изменить конечную точку сброса пароля , предоставленную 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
, чтобы установить пароль, когда пользователь пытается зарегистрироваться, и электронное письмо уже существует (или только в том случае, если этот пользователь имеет социальный аккаунт). Если хотите, я могу добавить пример, как это сделать.