Django Rest Framework + Serializers + Vue.js, Функциональность сброса пароля
Я пытаюсь создать функциональность сброса пароля, но не могу найти хорошее руководство, которое объясняет, как это сделать с помощью DRF и Vue.js. Я использую сериализаторы для передачи данных, поэтому нет никаких html представлений. Каков наиболее эффективный способ создания этой функциональности сброса пароля?
Я создаю новых пользователей через /api/v1/users/.
Идея заключается в том, чтобы отправить ссылку по электронной почте, которая ведет на ResetPassword.vue (не очень понимаю, как это сделать, не могу найти хороший учебник по этому вопросу), где пользователь вводит новый пароль и после нажатия submit перенаправляется на Login.vue.
Любые идеи будут очень признательны. Спасибо!
После проб и изобретения различных вариантов, мне удалось найти тот, который работает лучше всего. В принципе, если вы используете Django Rest Framework Auth token, в вашей базе данных будет таблица, в которой будут храниться Key: (здесь токен пользователя) и Name: (здесь имя пользователя). Итак, вы создаете представление, в котором будет только форма с вводом email и кнопка отправки. Вы получаете письмо, отправляете его с помощью Axios в бэкенд, и вот представление, которым вы будете управлять:
@api_view(['POST', 'GET'])
def your_method_name_that_will_be_in_urls_py(request):
if request.method == "POST":
serializer = ResetPasswordEmail(data=request.data)
if serializer.is_valid():
//Here you get the email from Front-End
email = serializer.validated_data['email']
//Here you fin the user that has that email
user = User.objects.get(email=email)
//Here you get the token of that user
token = Token.objects.get(user=user)
if user:
//Here you pass the context of things above to send them in an email
context = {
'email': email,
'username': user,
'token': token
}
send_mail(
'SUBJECT',
render_to_string('emails/reset_password.txt', context),
'COMPANY NAME and No Reply',
[email],
fail_silently=False,
auth_user=None, auth_password=None, connection=None, html_message=None
)
serializer.save(token=token, slug=token)
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
И сериализатор, подобный этому:
class ResetPasswordEmail(serializers.ModelSerializer):
class Meta:
model = ResetPassword
fields = (
'email',
)
Кроме того, я создал модель для этого сброса пароля:
class ResetPassword(models.Model):
email = models.CharField(max_length=200, null=True)
token = models.CharField(max_length=255, null=True)
slug = models.SlugField(max_length=255)
def __str__(self):
return self.token
//This thing creates users personalized link, that they visit and have a enter new password view in Front-End.
def get_absolute_url(self):
return f'/{self.token}/'