join-api/auth_app/services.py
2025-04-18 06:25:18 +02:00

46 lines
No EOL
1.6 KiB
Python

from django.core.mail import send_mail
from django.template.loader import render_to_string
from django.conf import settings
from django.contrib.auth.tokens import default_token_generator
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.utils.encoding import force_bytes, force_str
from django.contrib.auth import get_user_model
User = get_user_model()
def create_password_reset_link(request, user, token):
"""Creates the password reset link."""
uidb64 = urlsafe_base64_encode(force_bytes(user.pk))
return f"{request.META.get('HTTP_ORIGIN', '')}/pw-reset/{uidb64}/{token}/"
def send_password_reset_email(user, token, reset_link):
"""Sends the password reset e-mail."""
subject = 'Password Reset Request'
message = render_to_string('password_reset_email.html', {
'first_name': user.first_name,
'last_name': user.last_name,
'token': token,
'reset_link': reset_link,
})
from_email = settings.DEFAULT_FROM_EMAIL
to_email = [user.email]
send_mail(subject, message, from_email, to_email, html_message=message)
def verify_password_reset_token(uidb64, token):
"""Verifies the password reset token."""
try:
uid = force_str(urlsafe_base64_decode(uidb64))
user = User.objects.get(pk=uid)
except (TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and default_token_generator.check_token(user, token):
return user
return None
def set_user_password(user, password):
"""Sets the new password for the user."""
user.set_password(password)
user.save()