Как сохранить журнал активности для сброса пароля в django? - PullRequest
0 голосов
/ 17 июня 2020

В моей системе я хочу отслеживать все действия пользователей по входу / выходу из системы, но я застрял, пока веду журнал действий по сбросу пароля пользователя.

Как я могу сохранить эту активность пользователя в моей модели UserActivity?

Есть ли какие-нибудь предложения?

Как я могу получить адрес электронной почты пользователя при успешном сбросе пароля посмотреть?

модели

class UserActivity(models.Model):  
    change_message = models.CharField(max_length=255)
    ip = models.GenericIPAddressField(null=True)
    user = models.CharField(max_length=255, blank=True, null=True)
    action_time = models.DateTimeField(auto_now_add=True)


    @receiver(user_logged_in)
    def user_logged_in_callback(sender, request, user, **kwargs):
        ip = request.META.get('REMOTE_ADDR')
        UserActivity.objects.create(change_message='User Logged in', ip=ip, user=user.email)

    @receiver(user_logged_out)
    def user_logged_out_callback(sender, request, user, **kwargs):
        ip = request.META.get('REMOTE_ADDR')
        UserActivity.objects.create(change_message='User Logged out', ip=ip, user=user.email)

    @receiver(user_login_failed)
    def user_login_failed_callback(sender, request, credentials, **kwargs):
        ip = request.META.get('REMOTE_ADDR')
        UserActivity.objects.create(change_message='User Login Failed', ip=ip, user=credentials.get('email', None))

URL-адреса для сброса пароля

 path('password-reset/confirm/<uidb64>/<token>/',
         auth_views.PasswordResetConfirmView.as_view(template_name='users/password_reset_confirm.html',
                                                     success_url=reverse_lazy('users:password_reset_complete'),
                                                     form_class=PasswordResetConfirmForm),
         name='password_reset_confirm'),

    path('password-reset/complete/', views.PasswordResetSuccessView.as_view(), name='password_reset_complete')

просмотр

class PasswordResetSuccessView(View):
    template_name = 'users/password_reset_complete.html',

    def get(self, request):
        ip = request.META.get('REMOTE_ADDR')
        UserActivity.objects.create(change_message='An user resets the password', ip=ip, user = ? )

1 Ответ

0 голосов
/ 17 июня 2020

Что ж, я решил это, переопределив метод save() из SetPasswordForm, как это, и удалил logi c из CompleteView.

Если есть лучший подход, дайте мне знать

class PasswordResetConfirmForm(SetPasswordForm):

    def save(self, commit=True):
        password = self.cleaned_data["new_password1"]
        self.user.set_password(password)
        if commit:
            self.user.save()
            # creating activity here
            UserActivity.objects.create(change_message='An user resets the password', user=self.user.email)
        return self.user
...