Я создаю веб-приложение с использованием существующих функций аутентификации в Django, где администратор создает профиль пользователя с именем пользователя и паролем. Созданное администратором имя пользователя и пароль будут предоставлены пользователю для входа в систему. Поэтому в целях безопасности мне нужно попросить пользователя сбросить пароль (заданный администратором) после первого успешного входа пользователя. Чтобы сбросить пароль, я буду отображать шаблон, где пользователь должен вводить только новый пароль и новый пароль еще раз для подтверждения. Этот новый пароль будет обновлен в базе данных sqlite.
Поэтому всякий раз, когда администратор меняет пароль пользователя. Мне нужно попросить пользователей сбросить пароль после первого успешного входа в систему.
Вот реализация, которую я сделал.
models.py: Здесь я устанавливаю логический флаг profile.force_password_change в значение TRUE при создании нового пользователя. Но profile.force_password_change не устанавливает значение TRUE, когда существующий пароль пользователя изменяется или создается новый пользователь.
middleware.py : Всякий раз, когда force_password_change устанавливается в TRUE, я использую промежуточное программное обеспечение для перенаправления для изменения представления пароля.
I have written below code to set profile.force_password_change to TRUE whenever new user is created or user password is changed by admin.
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
force_password_change = models.BooleanField(default=False)
def create_user_profile_signal(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
pass
def password_change_signal(sender, instance, **kwargs):
try:
user = User.objects.get(username=instance.username)
if not user.password == instance.password:
profile = user.get_profile()
profile.force_password_change = True
profile.save()
except User.DoesNotExist:
pass
signals.pre_save.connect(password_change_signal, sender=User, dispatch_uid='dau_gui_app.models')
signals.post_save.connect(create_user_profile_signal, sender=User, dispatch_uid='dau_gui_app.models')
class PasswordChangeMiddleware:
def process_request(self, request):
if request.user.is_authenticated() and re.match(r'^/status/?', request.path) and not re.match(
r'^/change_password/?', request.path):
profile = request.user.get_profile()
if not profile.force_password_change:
return HttpResponseRedirect(views.change_password_view)
# return HttpResponseRedirect('/admin/password_change/')
Settings.py : 1. Я включил AUTH_PROFILE_MODULE = 'dau_gui_app.UserProfile' 2. MIDDLEWARE_CLASSES = ('django_session_timeout.middleware.Password'Manager )MapdleChange)
Проблема, с которой я здесь сталкиваюсь, заключается в том, что я не могу установить флаг "profile.force_password_change = True", когда новый пользователь вошел в систему в первый раз. Также «return HttpResponseRedirect (views.change_password_view)» не перенаправляет при изменении пароля или после первого успешного входа в систему.
Пожалуйста, помогите мне