Сбросить пароль после первого успешного входа - PullRequest
0 голосов
/ 18 марта 2020

Я создаю веб-приложение с использованием существующих функций аутентификации в 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)» не перенаправляет при изменении пароля или после первого успешного входа в систему.

Пожалуйста, помогите мне

1 Ответ

1 голос
/ 19 марта 2020

Почему бы не установить значение по умолчанию для force_password_change равным True, а затем изменить на False после изменения пароля?

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    force_password_change = models.BooleanField(default=True)
    
class PasswordChangeMiddleware:
    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 profile.force_password_change:
            profile.force_password_change = False
            profile.save()
            return HttpResponseRedirect(redirect_url) #pass redirect url instead of view function name

Примечание: не забудьте мигрировать!

Также, если вам нужна помощь, обратитесь к некоторым из моих проектов на GitHub. Ex. https://github.com/manojbalaji1/En-kart

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...