> ## Documentation Index
> Fetch the complete documentation index at: https://translations.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Solución de problemas de errores de estado no válido en el plugin de WordPress Login by Auth0

# Solucionar errores de estado no válido en el plugin de WordPress

Agregamos la validación del parámetro state en la versión 3.6.0 del plugin de WordPress, que puedes encontrar en el [repositorio de GitHub `auth0/wordpress`](https://github.com/auth0/wordpress/releases/tag/3.6.0). Esta medida de seguridad ayuda a mitigar ataques CSRF al garantizar que la respuesta pertenezca a una solicitud iniciada por el mismo usuario. Para obtener más información, consulta [Prevenir ataques y redirigir a los usuarios con el parámetro state de OAuth 2.0](/es/docs/secure/attack-protection/state-parameters).

<div id="how-state-validation-works">
  ## Cómo funciona la validación del estado
</div>

El plugin realiza la validación del estado de la siguiente manera:

1. Establece una cookie `auth0_state` en el navegador mediante Javascript cuando se muestra el formulario de Login de Lock (en `wp-login.php` o en cualquier otra página al usar un shortcode o un widget).
2. Pasa ese valor al formulario de inicio de sesión integrado de Lock para que se envíe con la solicitud de autenticación.
3. Recibe ese valor de vuelta desde Auth0 sin cambios en un parámetro URL `state` si el inicio de sesión con Auth0 se realizó correctamente.
4. Valida que el valor recibido coincida con el valor enviado y almacenado en la cookie `auth0_state`. Si es válido, el proceso de inicio de sesión continúa. Si no, el proceso se detiene y se muestra un mensaje de error de "Estado no válido".
5. Elimina la cookie, independientemente de si es válido o no.
6. Usa valores del objeto decodificado en base64 para redirigir o realizar otras acciones de inicio de sesión, si es válido.

Este proceso debería ser completamente opaco tanto para el usuario que inicia sesión como para el administrador del sitio. El servidor de Auth0 no valida ni requiere un valor de estado y lo devuelve intacto a la URL de devolución de llamada. Si aparece el mensaje "Estado no válido", entonces uno de los primeros 4 pasos anteriores no se está produciendo.

<div id="common-causes-of-the-invalid-state-error">
  ## Causas comunes del error de estado no válido
</div>

A continuación, se muestran algunas causas comunes del error de estado no válido, así como algunos pasos de solución de problemas que puede seguir.

<div id="cached-callback-urls">
  ### URLs de devolución de llamada en caché
</div>

La causa más común del error de estado no válido es que la URL de devolución de llamada esté almacenada en caché en el servidor.

Desactive el almacenamiento en caché en su servidor para todas las URL enumeradas en el campo **Allowed Callback URLs** de [Auth0 Dashboard > Applications > Applications > Settings](https://manage.auth0.com/#/applications/\{yourClientId}/settings) y vuelva a probar. Además, excluya del almacenamiento en caché la URL del sitio (`/index.php` en una instalación normal) si incluye un parámetro de URL de Auth0.

Compruebe que la hora del servidor esté configurada correctamente. El error `BeforeValidException` puede producirse cuando parece que el token se generó antes de la hora actual, algo que puede ocurrir si el reloj del servidor está desajustado. Puede comprobar la hora del servidor usando `echo current_time( 'c' )`. Como solución temporal, también puede modificar el complemento para añadir un desfase horario si no puede cambiar la hora del servidor, pero esto debe corregirse para producción.

Si eso no resuelve el problema, continúe con los pasos de solución de problemas que se indican a continuación.

<div id="cached-cookies-and-url-parameters">
  ### Cookies almacenadas en caché y parámetros de URL
</div>

Si está en un servicio de hosting administrado como WP-Engine, es posible que deba ponerse en contacto con su equipo de soporte para obtener ayuda adicional. Hemos recibido informes de problemas para acceder a las cookies necesarias en la URL de devolución de llamada, así como problemas al verificar la autenticación en la página final que ven los usuarios después de iniciar sesión. En concreto, solicite que se agreguen exclusiones de caché para:

* **Cookie:** `auth0_state`
* **Cookie:** `auth0_nonce`
* **Arg/parámetro de URL:** `auth0`
* **Arg/parámetro de URL:** `code`
* **Arg/parámetro de URL:** `state`
* **Arg/parámetro de URL:** `id_token`

<div id="page-refresh-after-error-message">
  ### Recarga de la página después de un mensaje de error
</div>

Si recarga la página después de ver un mensaje de error distinto (verificación de correo electrónico, etc.), aparecerá el mensaje de estado no válido, ya que se intentará volver a validar un valor que ya se utilizó. Esto es lo esperado.

<div id="cookie-names-requirement">
  ### Requisito sobre los nombres de las cookies
</div>

Algunos hosts, como Pantheon, requieren el uso de nombres de cookies específicos. Puedes cambiar el nombre de la cookie mediante el filtro `auth0_state_cookie_name` en tu tema o en un plugin personalizado. Para obtener más información sobre el filtro `auth0_state_cookie_name`, consulta [Extiende el plugin de WordPress Login by Auth0](/es/docs/customize/integrations/cms/wordpress-plugin/extend-login-by-auth0). Para obtener información adicional, [consulta el issue relacionado en GitHub](https://github.com/auth0/wordpress/issues/494) y [revisa su corrección](https://github.com/auth0/wordpress/pull/495).

<div id="universal-login-page-and-link-building">
  ### Página de Universal Login y creación de enlaces
</div>

Si su sitio usa la página de <Tooltip tip="Universal Login: Su aplicación redirige a Universal Login, alojado en el Servidor de autorización de Auth0, para verificar la identidad del usuario." cta="Ver glosario" href="/es/docs/glossary?term=Universal+Login">Universal Login</Tooltip> y está creando el enlace manualmente en un tema o plugin, debe:

* Establecer una cookie llamada `auth0_state` con un valor generado aleatoriamente
* Enviar ese valor en un parámetro de URL `state`.

Como alternativa, puede ir a Configuración > pestaña Funciones > Página de Universal Login y redirigir las solicitudes de inicio de sesión a la página `wp-login.php`, donde esa cookie y ese parámetro de URL se establecerán automáticamente.

<div id="visiting-the-callback-url-directly">
  ### Acceder directamente a la URL de devolución de llamada
</div>

Si accede directamente a su URL de devolución de llamada (normalmente `yourdomain.com/index.php?auth0=1`) o vuelve a hacerlo después de que se haya intercambiado el código de autorización, es posible que aparezca el error de estado no válido. Esto indica que el estado ya se ha verificado y eliminado.

<div id="troubleshoot-invalid-state-errors">
  ## Solucionar problemas de errores de estado no válido
</div>

Ten en cuenta que algunos de los pasos siguientes requerirán interrumpir el proceso de inicio de sesión (se indicará cuando sea así):

1. Con la sesión cerrada en WordPress y Auth0, visita la página de Login que estás probando.
2. Comprueba si se está estableciendo la cookie `auth0_state` (en Chrome, View > Developer > JavaScript Console > Application tab > Storage a la izquierda > Cookies > dominio que se está probando; busca una cookie `auth0_state` con un valor no vacío).

   * Si este valor no está establecido, comprueba si hay errores en la consola de JS y asegúrate de que tu navegador pueda aceptar cookies (el Login no funcionará sin cookies).
   * Si el valor está establecido, cópialo y visualiza el código fuente de la página (en Chrome, **View** > **Developer** > **View Source**). Busca el valor; debería aparecer como el valor asociado al parámetro `wpAuth0LockGlobal.settings.auth.params.state` ([ver JSON de ejemplo](https://gist.github.com/joshcanhelp/1b8bb990048325eb7214e2b3d7136b78)). Toma nota de este valor (lo necesitarás en un paso posterior).
3. Si el valor aparece allí y el formulario de Lock se carga con normalidad, entonces los pasos 1 y 2 de la primera lista anterior están funcionando correctamente.
4. Antes de iniciar sesión, [agrega este fragmento de código al principio de tu `wp-config.php`](https://gist.github.com/joshcanhelp/ba98f748747c7fd2ecdf54e73c6110f3) para poder hacer una instalación de prueba. **ADVERTENCIA**: Esto interrumpirá el Login del sitio de WordPress que se está probando, así que úsalo solo en una instalación que no sea de producción.
5. Inicia sesión normalmente.
6. Después de que se te redirija de vuelta a la URL de devolución de llamada de tu sitio, el proceso se detendrá. Deberías ver una salida como la que se muestra en el Gist enlazado en el paso n.º 4 anterior. Si ves algo como `Array()` sin valores adicionales, podría estar ocurriendo una de estas dos cosas:

   * La URL de devolución de llamada de WordPress está almacenada en caché. El almacenamiento en caché de páginas puede producirse de muchas formas distintas, por lo que no podemos proporcionar pasos concretos aquí. Revisa cualquier plugin de caché que tengas instalado; normalmente incluyen algún tipo de exclusión de URL. Consulta también con tu proveedor de hosting, ya que el almacenamiento en caché puede ser automático y requerir la intervención del equipo de soporte.
   * El servidor no está leyendo la cookie de Auth0. Para una posible solución, [consulta el issue relacionado en GitHub](https://github.com/auth0/wordpress/issues/494) y [revisa su corrección](https://github.com/auth0/wordpress/pull/495).
7. Si los valores están presentes, comprueba los encabezados de respuesta de la URL de devolución de llamada que se está cargando (en Chrome, View > Developer > JavaScript Console > Network tab, haz clic en el primer "document" listado con un estado 500 y busca "Response Headers"). Busca cualquier indicio de almacenamiento en caché, como un `Cache-Control` con un `max-age` distinto de cero, un `x-cache` con un valor distinto de `MISS` o cualquier otra pista de que esta página se está sirviendo desde una caché.
8. También en los encabezados de respuesta, comprueba que `set-cookie` incluya una directiva como `auth0_state=deleted` para confirmar que el proceso de validación se está llevando a cabo.
9. Asegúrate de que el parámetro `state` de la URL coincida con el registrado a partir de la cookie establecida en el paso n.º 3 anterior.
10. Si no hay indicios de almacenamiento en caché, elimina el fragmento de depuración de `wp-config.php` y vuelve a cargar la URL de devolución de llamada. Deberías volver a ver el mensaje "Estado no válido". Si se hicieron cambios en la caché, intenta completar todo el proceso de Login (asegúrate de borrar las cookies y la caché del navegador del sitio antes de hacer la prueba).

Los siguientes pasos de solución de problemas requieren cambios en el plugin que interrumpirán el proceso de Login y que deberán revertirse una vez completados. Estos pasos deben realizarse en un servidor de prueba o de staging.

11. A continuación, debemos comprobar por qué el estado llega pero no coincide con el valor almacenado.

12. En `lib/WP_Auth0_LoginManager.php`, muestra los valores del estado almacenado y del estado devuelto, y detén el proceso a continuación. Justo antes de la [línea 148](https://github.com/auth0/wp-auth0/blob/master/lib/WP_Auth0_LoginManager.php#L148), agrega:

```bash wrap lines theme={null}
echo '<h1>$_REQUEST</h1>'; var_dump($_REQUEST); echo '<h1>$_COOKIE</h1>'; var_dump($_COOKIE); die('<h1>Done</h1>');
```

13. Una vez más, asegúrate de haber cerrado sesión y completa el proceso de Login.

14. Deberías ver valores en la salida cuando se te redirija de nuevo a la URL de devolución de llamada de WordPress.

15. Comprueba si el valor de `state` en `$_REQUEST` existe y coincide con el valor de `auth0_state` en `$_COOKIE`.

* Si es diferente, debe coincidir con el valor original registrado en el paso n.º 3 anterior. Esto significa que el valor de estado de `$_COOKIE` ha cambiado en algún momento del proceso.

Si ninguno de los pasos anteriores resuelve el problema, recopila los resultados de los pasos anteriores y [contacta con soporte](https://support.auth0.com/center/s/) o [publica en Community](https://community.auth0.com/tag/wordpress) con la etiqueta `wordpress`. Incluye también:

* Versión de PHP
* Versión de WordPress
* Versión del plugin de Auth0
* Navegador y sistema operativo utilizados para la prueba
* Un [archivo HAR](https://support.auth0.com/center/s/article/generate-and-analyze-har-files-to-troubleshoot-auth0-issues) que registre todo el proceso, desde la carga de la página con el formulario de inicio de sesión hasta el mensaje "Estado no válido".

  <Warning>
    Antes de compartir un archivo HAR con alguien (incluido Auth0), asegúrate de eliminar u ofuscar todos los datos confidenciales, como:

    * Información confidencial del usuario
    * Información de identificación personal (PII)
    * Información confidencial de la aplicación

    Para obtener más información, consulta los siguientes artículos en el Auth0 Support Center:

    * [Sanitizing HTTP Traces](https://support.auth0.com/center/s/article/How-to-Remove-Secrets-from-a-har-File)
    * [How to Sanitize an HTTP Trace File Automatically](https://support.auth0.com/center/s/article/How-to-Sanitize-a-HTTP-Trace-File-Automatically)
    * [How to Manually Redact Sensitive Information](https://support.auth0.com/center/s/article/How-to-Manually-Redact-Sensitive-Information)
    * [HAR File is Too Large to Upload to the Support Case](https://support.auth0.com/center/s/article/HAR-File-is-too-Large-to-Upload-to-the-Support-Case)
  </Warning>

<div id="related-posts">
  ## Publicaciones relacionadas
</div>

* [Error de "Estado no válido" durante la redirección de Auth0 en WordPress](https://community.auth0.com/t/invalid-state-error-during-auth0-wordpress-redirect/12552/16) en Auth0 Community
* [Estado no válido al visitar directamente la URL de devolución de llamada](https://wordpress.org/support/topic/unable-to-resolve-troubleshooting-with-a-client-grant-for-already-exists/) en wordpress.org
