Fase 3 (islas): cambiar contraseña y token de seguridad en React/TSX
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>
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
import { StrictMode } from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
import { ChangePasswordForm } from '../components/ChangePasswordForm'
|
||||
|
||||
const el = document.getElementById('change-password-app')
|
||||
if (el) {
|
||||
createRoot(el).render(
|
||||
<StrictMode>
|
||||
<ChangePasswordForm
|
||||
url={el.dataset.url || ''}
|
||||
csrfToken={el.dataset.csrf || ''}
|
||||
loginUrl={el.dataset.loginUrl || '/es/log-in/'}
|
||||
/>
|
||||
</StrictMode>,
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { StrictMode } from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
import { SecurityTokenForm } from '../components/SecurityTokenForm'
|
||||
|
||||
const el = document.getElementById('security-token-app')
|
||||
if (el) {
|
||||
createRoot(el).render(
|
||||
<StrictMode>
|
||||
<SecurityTokenForm
|
||||
url={el.dataset.url || ''}
|
||||
csrfToken={el.dataset.csrf || ''}
|
||||
initialDate={el.dataset.tokenDate || 'Sin solicitar'}
|
||||
/>
|
||||
</StrictMode>,
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user