Las páginas protegidas con contraseña no funcionan en WordPress con caché (plugin, Cloudfront o Cloudflare).

Recientemente hemos estado peleando con esto, y os dejamos la solución.

Problema.

El problema detectado es que no te funcionan las páginas protegidas con contraseña en WordPress. En nuestro caso por más que ponías la contraseña correcta en algunas páginas te la volvía a preguntar. En otras páginas simplemente aparecía el texto sin poner la contraseña.

Causa.

Para entender lo que está pasando hay que comprender cómo funcionan las páginas protegidas por contraseña en WordPress.

Cuando proteges una página, y el usuario pone la contraseña, el truco es que WordPress la comprueba, guarda la contraseña en una cookie llamada
wp-postpass_COOKIEHASH donde COOKIEHASH es un número generado (un hash).
Para ello va a la url wp-login.php?action=postpass

Las causas del error pueden ser varias:

  • Se ha modificado el wp-login.php (por ejemplo para cambiar el acceso de usuario) o alguna redirección o bloqueo no deja llegar a esa página. En tal caso no puede comprobar la contraseña y no funciona.
    Prueba a acceder a tudominio/wp-login.php para ver si funciona.
  • Se está impidiendo acceder o guardar la cookie wp-postpass_*
    Esto suele ser por un CDN o caché, lo vemos más adelante.
  • El caché está guardando esta cookie demasiado tiempo y la contraseña ha cambiado.
    Cambia los tiempos de expiración de las cookies (en concreto la que hemos dicho).
  • La configuración del servidor o de la web está impidiendo que de la página vaya a wp-login y vuelva a la página. Esto está relacionado con los «HTTP referrers«.
    En estos casos dejando pasar estos en el firewall o quitando cosas como <meta name=»referrer» content=»no-referrer»> de la web se arregla.

Obviamente hay alguna causa más pero esto son los principales.

Solución si tienes CDN o caché tipo Cloudfront de Amazon o Cloudflare.

Si estás trabajando con Cloudfront de Amazon o Cloudflare, la causa seguramente será la cookie.

En este caso tienes que ir a la configuración de tu CDN y decir que deje pasar (whitelist) la cookie wp-postpass_*. En Amazon Cloudfront por ejemplo funciona así. Pero debería funcionar en cualquier CDN o plugin de caché.

Comprueba también que los HTTP referrer no los está eliminando el CDN, es decir que los deje pasar como los manda el origen (muchos CDN eliminan los headers).

Esperamos que con esto se os quiten muchos dolores de cabeza porque es un error de los «raros».

Deja un comentario

Resumen de nuestra Política de Privacidad

  • Responsable: SmythSys IT Consulting SLNE.
  • Finalidad: Gestionar y moderar los comentarios.
  • Legitimación: Necesitas dar tu consentimiento para publicar un comentario.
  • Destinatarios: Tus datos se alojan en los servidores de OVH.
  • Derechos: Tienes derecho a acceder, rectificar, limitar y suprimir los datos en la dirección del responsable (en nuestra política de privacidad).

Time limit is exhausted. Please reload CAPTCHA.