Cutomize dj_rest_auth Сброс пароля по электронной почте
Я хочу отправлять настроенные электронные письма, когда пользователь запрашивает сброс пароля. Я использую dj_rest_auth с django. Вот что я сделал: 1. Определил пользовательский сериализатор, который наследуется от PasswordResetSerializer из dj_rest_auth
class CustomPasswordResetSerializer(PasswordResetSerializer):
def get_email_options(self):
return {
'html_mail_template_name': 'registration/password_reset_email.html',
}
Затем в settings.py указал на этот сериализатор:
REST_AUTH_SERIALIZERS = {
'LOGIN_SERIALIZER': 'users.serializers.CustomLoginSerializer',
'PASSWORD_RESET_SERIALIZER': 'users.serializers.CustomPasswordResetSerializer',
}
Затем настроенные шаблоны в settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
Затем я создал папку templates в корне проекта, создал в ней папку registration и поместил в нее password_reset_email.html.
Это то, что я нашел как точное решение моей проблемы после того, как погуглил некоторое время, но это не работает для меня. Что я упустил?
Этот ответ помог мне https://stackoverflow.com/a/70624462/15624533
Я просто положил свои файлы (html или txt) прямо в папку templates, и изменил 'account/email/password_reset_key' на просто 'password_reset_key' в методе send_mail.
Я столкнулся с той же проблемой и получил решение из этого вопроса на GitHub. https://github.com/iMerica/dj-rest-auth/issues/9 . Это проще, чем вы думаете
Создайте свой собственный сериализатор сброса пароля
from dj_rest_auth.serializers import PasswordResetSerializer
class CustomPasswordResetSerializer(PasswordResetSerializer):
def save(self):
request = self.context.get('request')
# Set some values to trigger the send_email method.
opts = {
'use_https': request.is_secure(),
'from_email': 'example@yourdomain.com',
'request': request,
# here I have set my desired template to be used
# don't forget to add your templates directory in settings to be found
'email_template_name': 'password_reset_email.html'
}
opts.update(self.get_email_options())
self.reset_form.save(**opts)
Если вы хотите настроить только параметры электронной почты, ни больше ни меньше, вы можете игнорировать переопределение метода save() и переопределить get_email_options() вместо этого
from dj_rest_auth.serializers import PasswordResetSerializer
class MyPasswordResetSerializer(PasswordResetSerializer):
def get_email_options(self) :
return {
'email_template_name': 'password_reset_email.html'
}
затем укажите на ваш пользовательский сериализатор в settings.py
REST_AUTH_SERIALIZERS = {
'PASSWORD_RESET_SERIALIZER': 'path.to.your.CustomPasswordResetSerializer'
}