d0febb4855
Ambas vistas ya devolvían JSON en POST y exigen sesión, así que sin cambio de backend: - ChangePasswordForm.tsx: 4 campos (actual/nueva/confirmar/token) con mostrar-ocultar; POST form-urlencoded + CSRF a change_password; mensaje HTML; si el backend responde redirect:true (logout por seguridad), redirige a login. - SecurityTokenForm.tsx: muestra la fecha del token y un botón que solicita uno nuevo; POST -> actualiza la fecha con token_date de la respuesta. - Plantillas: los <form> + scripts jQuery se sustituyen por las islas (#change-password-app / #security-token-app) con data-csrf/data-url. El texto informativo y los enlaces se quedan en Django. Verificado: check OK; ambas vistas siguen redirigiendo a login/index sin sesión. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
30 lines
1.9 KiB
HTML
30 lines
1.9 KiB
HTML
<div class="main-page">
|
|
<div class="middle-content">
|
|
<div class="body-content">
|
|
<div class="title-content"><h1>Cambiar contraseña</h1></div>
|
|
<div class="box-content">
|
|
<div class="title-box-content"><h2>Información</h2><a class="back-to-account" href="my-account">Regresar a mi cuenta</a><a class="back-to-account-responsive" href="my-account">Regresar</a></div>
|
|
<div class="body-box-content justified">
|
|
<br>
|
|
<p>La contraseña nueva debe ser alfanumérica y con una longitud de hasta 16 caracteres.</p>
|
|
<p>Escoje una contraseña que sea difícil de adivinar por los demás y guárdala en un lugar seguro.</p>
|
|
<br>
|
|
<p>Si aún no tienes Token de seguridad, puedes solicitarlo <a href="security-token" target="_blank">aquí</a>.</p>
|
|
<div class="centered">
|
|
<br>
|
|
<br>
|
|
{% load django_vite %}
|
|
<!-- Isla React (Vite): cambio de contraseña. POST a la propia
|
|
vista (JSON) -> re-deriva el verifier bnet. -->
|
|
<div id="change-password-app"
|
|
data-csrf="{{ csrf_token }}"
|
|
data-url="{% url 'change_password' %}"
|
|
data-login-url="{% url 'login' %}"></div>
|
|
{% vite_asset 'src/entries/change_password.tsx' %}
|
|
<br>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div> |