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:
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.