Sobescrita de view não funciona - django-allauth

34 views
Skip to first unread message

Yasmin

unread,
Feb 29, 2024, 8:00:42 AM2/29/24
to Django Brasil
Olá a todos novamente! sigo na tarefa de tentar personalizar algumas coisas do django-allauth em meu projeto e agora tentei muitas coisas para modificar o seguinte comportamento da PasswordResetFromKeyView:

1 - Essa view verifica se o token enviado pelo e-mail do usuário para redefinir sua senha é válido, se for apenas continua o processo normalmente, caso contrário, me parece que é adicionado ao contexto.

2 - É renderizado no template:
{% if token_fail %}
{% url 'account_reset_password' as passwd_reset_url %}
<p>
{% blocktrans %}The password reset link was invalid, possibly because it has already been used. Please request a <a href="{{ passwd_reset_url }}">new password reset</a>.{% endblocktrans %}
</p>  {% if token_fail %}
            {% url 'account_reset_password' as passwd_reset_url %}
            <p>
                {% blocktrans %}The password reset link was invalid, possibly because it has already been used.  Please request a <a href="{{ passwd_reset_url }}">new password reset</a>.{% endblocktrans %}
            </p>
        {% else %}
         
Eu tento sobescrever a view para ao invés da pagina ser renderizada novamente, o usuário ser
redirecionado para outra url e a mensagem acima ser apenas exibida como uma message do django
nessa outra url.

Na view original é tratado assim:
def dispatch(self, request, uidb36, key, **kwargs): self.request = request self.key = key user_token_form_class = get_form_class( app_settings.FORMS, "user_token", UserTokenForm ) if self.key == self.reset_url_key: self.key = self.request.session.get(INTERNAL_RESET_SESSION_KEY, "") # (Ab)using forms here to be able to handle errors in XHR #890 token_form = user_token_form_class(data={"uidb36": uidb36, "key": self.key}) if token_form.is_valid(): self.reset_user = token_form.reset_user # In the event someone clicks on a password reset link # for one account while logged into another account, # logout of the currently logged in account. if ( self.request.user.is_authenticated and self.request.user.pk != self.reset_user.pk ): self.logout() self.request.session[INTERNAL_RESET_SESSION_KEY] = self.key return super(PasswordResetFromKeyView, self).dispatch( request, uidb36, self.key, **kwargs ) else: token_form = user_token_form_class(data={"uidb36": uidb36, "key": self.key}) if token_form.is_valid(): # Store the key in the session and redirect to the # password reset form at a URL without the key. That # avoids the possibility of leaking the key in the # HTTP Referer header. self.request.session[INTERNAL_RESET_SESSION_KEY] = self.key redirect_url = self.request.path.replace(self.key, self.reset_url_key) return redirect(redirect_url) self.reset_user = None response = self.render_to_response(self.get_context_data(token_fail=True)) return _ajax_response(self.request, response, form=token_form)

Mas simplesmente não funciona, tentei:

    re_path(
        r"^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$",
        custom_password_reset_from_key_view,
        name="custom_reset_password_from_key",
    ),



class CustomPasswordResetFromKeyView(PasswordResetFromKeyView):
    def dispatch(self, request, uidb36, key, **kwargs):
        context = self.get_context_data(**kwargs)
        token_fail = context['token_fail']
        # Tento acessar o 'token_fail'
        if token_fail:
            return redirect('password_reset')
        return super().dispatch(request, uidb36, key, **kwargs)


custom_password_reset_from_key_view = CustomPasswordResetFromKeyView.as_view()


Dúvida um pouco extensa mas eu realmente não sei o que fazer nesse caso, se alguém tiver uma noção agradeço.

Luiz Carlos Santos

unread,
Feb 29, 2024, 9:12:28 AM2/29/24
to django...@googlegroups.com

--
Você recebeu essa mensagem porque está inscrito no grupo "Django Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para django-brasi...@googlegroups.com.
Para acessar essa discussão na Web, acesse https://groups.google.com/d/msgid/django-brasil/9b3dc703-f821-424b-ad71-c41018990de6n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages