Cómo iniciar sesión una vez en toda una red WP Multisite

30 jul 2015, 15:13:44
Vistas: 16.4K
Votos: 3

¿Alguien conoce un buen plugin que permita iniciar sesión una vez como Super Admin de la red WP-MS y poder cambiar entre sitios sin tener que volver a iniciar sesión en cada red o cada sitio individualmente?

Gracias

0
Todas las respuestas a la pregunta 3
12

Esto tiene que ver con el dominio de las cookies. Se establece para cada dominio, lo que impide los inicios de sesión en toda la red. Puedes intentar configurar la constante COOKIE_DOMAIN en tu archivo wp-config.php.

Por ejemplo, configurándola como vacía, lo que evita que WordPress cambie el dominio de la cookie para cada sitio:

define( 'COOKIE_DOMAIN', '' );

Quizás necesites configurar algunas otras constantes también para que funcione.

define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '' );
define( 'SITECOOKIEPATH', '' );

No me preguntes sobre las desventajas, porque no estoy completamente seguro de ello.

O puedes establecer un dominio de cookie específico para todos los sitios:

define( 'COOKIE_DOMAIN', 'example.com' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );

Probablemente sea una buena idea establecer también un hash de cookie único:

define( 'COOKIEHASH', 'unique_cookie_hash_string' );

En caso de que tengas otras instalaciones de WordPress que utilicen el mismo dominio para las cookies.

Actualización:

De la página de GitHub de WP Multi Network obtuve esto:

Inicio de sesión único

Coloca algo similar a esto en tu wp-config.php para compartir cookies en todos los sitios y redes.

// Cookies
define( 'COOKIEHASH',        md5( 'yourdomain.com' ) );
define( 'COOKIE_DOMAIN',     'yourdomain.com'        );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH',        '/' );
define( 'SITECOOKIEPATH',    '/' );
define( 'TEST_COOKIE',        'thing_test_cookie' );
define( 'AUTH_COOKIE',        'thing_'          . COOKIEHASH );
define( 'USER_COOKIE',        'thing_user_'     . COOKIEHASH );
define( 'PASS_COOKIE',        'thing_pass_'     . COOKIEHASH );
define( 'SECURE_AUTH_COOKIE', 'thing_sec_'      . COOKIEHASH );
define( 'LOGGED_IN_COOKIE',   'thing_logged_in' . COOKIEHASH );

Por lo que parece, es algo genérico de WordPress, no específico del plugin, así que podría valer la pena intentarlo. Podría ser que no hayamos hecho lo suficiente hasta ahora.

30 jul 2015 15:51:51
Comentarios

Eso no funcionó @ialocin. Inicié sesión en mi red principal/base de WP. Luego, cuando cambié de red, me apareció la pantalla de inicio de sesión nuevamente.

tammy tammy
31 jul 2015 23:39:00

Lástima, agregué información adicional a mi respuesta. Espero que ayude, porque de lo contrario personalmente no puedo decirte más. El resto tendrás que probarlo e investigarlo por tu cuenta. @tammy

Nicolai Grossherr Nicolai Grossherr
2 ago 2015 11:39:45

Ok, gracias @ialocin -- probaré esas opciones y volveré a publicar

tammy tammy
3 ago 2015 15:13:40

Prueba #1 (código abajo) -- esto no funcionó. Inicié sesión exitosamente en la red principal como Super Admin. Luego, cuando cambié de red, se me presentó la pantalla de inicio de sesión. define('COOKIE_DOMAIN', ''); define('ADMIN_COOKIE_PATH', '/'); define('COOKIEPATH', ''); define('SITECOOKIEPATH', '');

tammy tammy
3 ago 2015 15:49:13

Prueba #2 (código abajo) -- esto tampoco funcionó. Inicié sesión exitosamente en la red principal como Super Admin. Luego, cuando cambié de red, se me presentó la pantalla de inicio de sesión. define('COOKIE_DOMAIN', 'my-main-wp-network-site.com'); define('ADMIN_COOKIE_PATH', '/'); define('COOKIEPATH', '/'); define('SITECOOKIEPATH', '/');

tammy tammy
3 ago 2015 15:51:51

Probablemente me aventuraré a escribir mi propio plugin para lograr esto.

tammy tammy
3 ago 2015 15:53:13

Lo haré @ialocin. Te avisaré cuando tenga un plugin escrito y probado. Actualmente está más abajo en mi lista de prioridades, así que puede que tarde unas semanas en llegar a ello.

tammy tammy
3 ago 2015 16:23:10

¿son estas 2 redes diferentes de WP? ¿O 1 red de sitios funcionando desde 1 base de código?

Alex Older Alex Older
3 ago 2015 17:59:11

Actualmente tengo más de una docena de redes, cada una con 1 sitio dentro @AlexOlder. El Super Admin tiene acceso a todas y cada una de las redes en mi instalación de WP. Así que solo quiero iniciar sesión en WP 1 vez, es decir, para todas y cada una de las redes hoy, mañana y en el futuro. Espero que eso aclare las cosas.

tammy tammy
3 ago 2015 23:28:36

@tammy no lo hace. Si tienes una docena de configuraciones de red diferentes, no hay una forma segura de iniciar sesión en todas ellas a la vez.

Si son una docena de sitios en 1 instalación de WP, entonces cuando inicias sesión deberías estar conectado en toda la red única.

Alex Older Alex Older
5 ago 2015 13:35:17

Exactamente @AlexOlder -- de ahí la necesidad de que escriba mi propio plugin. Gracias. Si escribes eso como respuesta... la seleccionaré para cerrar este hilo.

tammy tammy
5 ago 2015 15:32:00

Los ajustes de Github funcionan bien para mí. Eso es dentro de UNA instalación multisitio, que es lo que esperaría.

omega33 omega33
20 dic 2022 00:46:31
Mostrar los 7 comentarios restantes
1

@tammy no lo hace. Si tienes una docena de configuraciones de red diferentes, no hay una forma segura de iniciar sesión en todas ellas a la vez. Si son una docena de sitios en una instalación de WP, al iniciar sesión deberías estar autenticado en toda la red.

– Alex Older 5 de agosto a las 10:35

17 ago 2015 17:06:50
Comentarios

Gracias @AlexOlder -- esta es la respuesta a mi pregunta...

tammy tammy
17 ago 2015 17:07:51
2

A partir de WordPress 4.2.4, una instalación multisitio estándar con el Plugin de Desarrollo MU Domain Mapping 0.5.5 y el Plugin Multisite User Management 1.1, iniciar sesión a través del dominio principal registrará a un usuario en todos los sitios a los que esté asignado (todos los sitios como usuario super administrador). Sin embargo, el usuario debe visitar un sitio secundario para establecer la cookie y la autenticación, lo cual se hará automáticamente. Afortunadamente, se puede incluir una solución para cerrar la sesión de un usuario en todos los sitios si se ha visitado cualquier sitio secundario mientras se estaba autenticado en el dominio principal. Actualmente, he encontrado que no cierra la sesión en todos los sitios por defecto. A continuación, se muestra lo que puedes agregar a tu archivo functions.php en tu tema, lo que destruirá las sesiones del usuario en toda la red al cerrar sesión:

function clear_session_on_logout() {

$current_user = wp_get_current_user();

// obtener todas las sesiones para el usuario con ID $user_id
$sessions = WP_Session_Tokens::get_instance($current_user->ID);

// hemos obtenido las sesiones, ¡destrúyelas todas!
$sessions->destroy_all();
}
add_action('clear_auth_cookie', 'clear_session_on_logout');

También es una buena idea actualizar tu tema en toda la red o los temas utilizados en los sitios secundarios para iniciar y cerrar sesión con el wp-admin/ del dominio principal. Sin embargo, si requieres que el usuario cierre sesión en cada sitio secundario "si lo ha visitado" mientras estaba conectado al dominio principal, entonces el gancho de cierre de sesión predeterminado será suficiente.

Para tu información: Si inicias sesión en un sitio secundario con una cuenta de Super Administrador, no te registrará en todos los sitios. Creo que esto es por diseño, y simplemente es una solución fácil modificando el gancho de inicio y cierre de sesión del tema para que siempre use el dominio principal. Si prefieres redirigir de vuelta al dominio secundario al iniciar y cerrar sesión, también se puede hacer un gancho simple para esto.

7 ago 2015 17:49:48
Comentarios

Además, he encontrado molesto el menú desplegable predeterminado "Mis sitios" en la barra de wp-admin, ya que te redirige al wp-admin/ del sitio secundario, lo que obliga a cualquier usuario (incluido el super administrador) a iniciar sesión nuevamente en el sitio secundario, incluso si ya está autenticado en el dominio principal (extraño). Si visitas cualquier otra página que no sea el directorio wp-admin/ de un sitio secundario, el usuario se autenticará automáticamente y aparecerá la barra de administración. Una solución sencilla en la barra de wp-admin es cambiar los enlaces del menú desplegable para que apunten al site_url(); del sitio secundario.

Zach Goldsmith Zach Goldsmith
7 ago 2015 18:17:03

Gracias @ZachGoldsmith por intervenir en esto. Estoy buscando un inicio de sesión único para todas mis redes...no solo para los sitios dentro de cada red. Así que he comenzado a escribir mi propio inicio de sesión para lograrlo, ya que no parece haber uno disponible que lo haga.

tammy tammy
7 ago 2015 22:17:32