Estoy tratando de crear una funcionalidad de restablecimiento de contraseña, pero no puedo encontrar un buen tutorial que explique cómo hacerlo con DRF y Vue.js. Estoy usando serializadores para pasar los datos, por lo que no hay vistas html involucradas. ¿Cuál es la forma más eficiente de crear esa funcionalidad de restablecimiento de contraseña?
Estoy creando nuevos usuarios a través de /api/v1/users/.
La idea es enviar un enlace por correo electrónico que conduzca a ResetPassword.vue (Realmente no entiendo cómo hacerlo, tampoco puedo encontrar un buen tutorial sobre eso) donde el usuario ingresa la nueva contraseña y luego de presionar enviar es redirigido a Iniciar sesión.vue.
Cualquier idea es muy apreciada. ¡Gracias!
Después de probar e inventar diferentes opciones, logré encontrar una que funciona mejor. Básicamente, si está utilizando el token de autenticación Django Rest Framework, en su base de datos tendrá una tabla que contendrá Clave: (aquí está el token del usuario) y Nombre: (aquí está el nombre del usuario). Entonces, crea una vista que solo tendrá un formulario con entrada de correo electrónico y botón de envío. Recibe el correo electrónico, lo publica con Axios en el backend y aquí está la vista que administrará:
@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)
Y el serializador como este:
class ResetPasswordEmail(serializers.ModelSerializer): class Meta: model = ResetPassword fields = ( 'email', )
Además, creé un modelo para ese restablecimiento de contraseña:
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}/'