Come Effettuare il Login Una Volta per Tutta la Rete WP Multisite

30 lug 2015, 15:13:44
Visualizzazioni: 16.4K
Voti: 3

Qualcuno conosce un buon plugin che permetta di effettuare il login una sola volta come Super Admin della rete WP-MS e di poter passare da un sito all'altro senza dover rifare il login per ogni rete e/o ogni sito individualmente?

Grazie

0
Tutte le risposte alla domanda 3
12

Questo riguarda il dominio dei cookie. È impostato per ogni dominio, il che impedisce accessi condivisi su tutta la rete. Puoi provare a impostare la costante COOKIE_DOMAIN nel tuo file wp-config.php.

Ad esempio, impostandola vuota, in modo che WordPress non modifichi il dominio del cookie per ogni sito:

define( 'COOKIE_DOMAIN', '' );

Potrebbe essere necessario impostare anche altre costanti per farlo funzionare.

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

Non chiedermi degli svantaggi, perché non ne sono completamente sicuro.

Oppure puoi impostare un dominio specifico per i cookie su tutti i siti:

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

Probabilmente è una buona idea impostare anche un hash univoco per i cookie:

define( 'COOKIEHASH', 'unique_cookie_hash_string' );

Nel caso in cui tu abbia altre installazioni di WordPress che utilizzano lo stesso dominio per i cookie.

Aggiornamento:

Dalla pagina GitHub di WP Multi Network ho trovato questo:

Single Sign-on

Aggiungi qualcosa di simile nel tuo wp-config.php per condividere i cookie su tutti i siti e le reti.

// 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 );

A giudicare dal codice, si tratta di funzionalità generiche di WordPress, non specifiche del plugin, quindi vale la pena provare. Potrebbe essere che finora non abbiamo fatto abbastanza.

30 lug 2015 15:51:51
Commenti

Non ha funzionato @ialocin. Ho effettuato l'accesso alla mia rete WP Core/Base. Poi, quando ho cambiato rete, mi è stata nuovamente presentata la schermata di login.

tammy tammy
31 lug 2015 23:39:00

Peccato, ho aggiunto alcune informazioni aggiuntive alla mia risposta. Spero che ti aiutino, perché altrimenti personalmente non posso dirti di più. Il resto devi provarlo e fare ricerche da solo. @tammy

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

Ok, grazie @ialocin -- proverò queste soluzioni e risponderò

tammy tammy
3 ago 2015 15:13:40

Test #1 (codice sotto) -- questo non ha funzionato. Ho effettuato l'accesso con successo alla rete principale/core come Super Admin. Poi, quando ho cambiato rete, mi è stata presentata la schermata di login. define('COOKIE_DOMAIN', ''); define('ADMIN_COOKIE_PATH', '/'); define('COOKIEPATH', ''); define('SITECOOKIEPATH', '');

tammy tammy
3 ago 2015 15:49:13

Test #2 (codice sotto) -- anche questo non ha funzionato. Ho effettuato l'accesso con successo alla rete principale/core come Super Admin. Poi, quando ho cambiato rete, mi è stata presentata la schermata di login. 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

Probabilmente cercherò di scrivere il mio plugin per ottenere questo risultato.

tammy tammy
3 ago 2015 15:53:13

Lo farò @ialocin. Ti farò sapere quando avrò scritto e testato un plugin. Al momento non è una priorità, quindi potrebbero volerci alcune settimane prima che possa occuparmene.

tammy tammy
3 ago 2015 16:23:10

sono 2 reti WP diverse? O 1 rete di siti che funzionano da 1 code base?

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

Attualmente ho più di una dozzina di reti, ognuna con 1 sito all'interno @AlexOlder. Il Super Admin ha accesso a ogni singola rete nella mia installazione WP. Quindi voglio solo accedere a WP 1 volta - cioè, per ogni singola rete oggi, domani e in futuro. Spero che questo chiarisca.

tammy tammy
3 ago 2015 23:28:36

@tammy non lo fa. Se hai una dozzina di configurazioni di rete diverse, non esiste un modo sicuro per accedere a tutte contemporaneamente.

Se si tratta di una dozzina di siti su 1 installazione WP, quando effettui l'accesso dovresti essere loggato attraverso una singola rete.

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

Esatto @AlexOlder -- da qui la necessità per me di scrivere il mio plugin. Grazie. Se lo scrivi come risposta... la selezionerò per chiudere questa discussione.

tammy tammy
5 ago 2015 15:32:00

Le impostazioni da Github funzionano bene per me. Questo all'interno di UN'installazione multisito, che è quello che mi aspetterei.

omega33 omega33
20 dic 2022 00:46:31
Mostra i restanti 7 commenti
1

@tammy non funziona così. Se hai una dozzina di configurazioni di rete diverse non esiste un modo sicuro per accedere a tutte contemporaneamente. Se si tratta di una dozzina di siti su una singola installazione WP, quando effettui il login dovresti essere autenticato su tutta la rete.

– Alex Older, 5 ago alle 10:35

17 ago 2015 17:06:50
Commenti

Grazie @AlexOlder -- questa è la risposta alla mia domanda...

tammy tammy
17 ago 2015 17:07:51
2

A partire da WordPress 4.2.4, un'installazione multisito standard con il plugin MU Domain Mapping 0.5.5 Development e il plugin Multisite User Management 1.1, effettuando il login attraverso il dominio principale, un utente verrà autenticato su tutti i siti a cui è assegnato (tutti i siti come utente super admin). Tuttavia, l'utente deve visitare un sito secondario per stabilire il cookie e l'autenticazione, cosa che avverrà automaticamente. Fortunatamente, è possibile includere una soluzione alternativa per disconnettere l'utente da tutti i siti se è stato visitato qualsiasi sito secondario durante l'autenticazione sul dominio principale. Attualmente ho riscontrato che non esegue la disconnessione da tutti i siti per impostazione predefinita. Ecco cosa puoi aggiungere al tuo file functions.php nel tema, che distruggerà le sessioni dell'utente su tutta la rete durante il logout:

function clear_session_on_logout() {

$current_user = wp_get_current_user();

// ottieni tutte le sessioni per l'utente con ID $user_id
$sessions = WP_Session_Tokens::get_instance($current_user->ID);

// abbiamo ottenuto le sessioni, distruggile tutte!
$sessions->destroy_all();
}
add_action('clear_auth_cookie', 'clear_session_on_logout');

È anche una buona idea aggiornare il tema utilizzato in tutta la rete o i temi utilizzati nei siti secondari per effettuare il login e il logout utilizzando la directory wp-admin/ del dominio principale. Tuttavia, se richiedi che l'utente esegua il logout da ogni sito secondario "se visitato" mentre è connesso al dominio principale, allora l'hook di logout predefinito sarà sufficiente.

Nota: Se accedi a un sito secondario con un account Super Admin, non verrai autenticato su tutti i siti. Penso che sia una scelta progettuale, e una soluzione semplice consiste nel modificare il tema per utilizzare sempre il dominio principale per il login e il logout. Se preferisci reindirizzare nuovamente al dominio secondario durante il login e il logout, è possibile implementare anche un semplice hook per questo scopo.

7 ago 2015 17:49:48
Commenti

Ho anche trovato fastidioso il menu a discesa predefinito "I miei siti" nella barra di amministrazione di wp-admin, che ti indirizza alla pagina wp-admin/ del sito figlio, costringendo qualsiasi utente (incluso il super amministratore) a effettuare nuovamente il login sul sito figlio anche se già autenticato sul dominio principale (strano). Se visiti qualsiasi altra pagina diversa dalla directory wp-admin/ di un sito figlio, un utente verrà autenticato automaticamente e la barra di amministrazione apparirà. Una semplice correzione nella barra di amministrazione consiste nel modificare i collegamenti nel menu a discesa in modo che puntino a site_url(); del sito figlio.

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

Grazie @ZachGoldsmith per il tuo intervento. Sto cercando un single sign-on per tutte le mie reti...non solo per i siti all'interno di ogni rete. Quindi ho iniziato a scrivere il mio sistema di login per ottenere questo risultato, poiché non sembra esistere una soluzione già pronta che lo faccia.

tammy tammy
7 ago 2015 22:17:32