In Drupal 9, non è raccomandato utilizzare il login condiviso in un multi - site come si faceva in Drupal 7.
Ad ogni modo, finché non adottiamo una politica e non troviamo soprattutto una valida alternativa a riguardo,
si possa procedere in questo modo.
- In /sites/default/services.yml si deve aggiungere un cookie_domain, senza non funziona.
- In /sites/default/settings.php non occorre nessuna modifica
- In /sites/federato/settings.php bisogna aggiungere delle tabelle di DB che sono condivise con il db di default, quali (users, users_data, users_field_data, sessions,sequences)
- Tutti i siti del multi - site devono essere in https.
Ho fatto questa configurazione in unibgd9, si possa prendere riferimento da quella.
Siccome non funziona in http, ci sono alcuni accorgimenti per condividere o meno le tabelle e services con il cookie_domain. Lasciare il cookie_domain quando non si possa condividere provoca che non si entra più nei siti. Il cookie domain deve cominciare con un punto (.) obbligatoriamente.
/sites/default:
- services.yml (cookie_domain commentato)
- services.prod.yml (cookie domain per URL DEFINITIVO [ .unibg.it ] )
- services.prod.cineca.yml (cookie domain per https://default-unibgd9-d8cl5.prod.cineca.it/ url https di Cineca [ .prod.cineca.it ] )
- services.preprod.cineca.yml ( cookie domain per https://default-unibgd9-d8cl5.pp.cineca.it/ url https di Cineca per PP [.pp.cineca.it] )
/sites/default/services.yml
parameters: session.storage.options: cookie_domain: '.unibg.it'
Quindi oltre le variabili di Drupal, vengono utilizzate anche le variabili di Cineca, come si faceva in Drupal 7.
Quindi si recupera il nome del DB di default, salvato in /drupal/dim_prod/common/common_settings/file
e se il sito non è in http ( if($base_insecure_url != $base_url)) allora si condividono le tabelle
Per il preprod siccome possa avere https ma non sempre, c'è la condizione di metterlo in services.preprod2 il quale altro non è che con cookie_domain nessuno.
if (file_exists('/drupal/dim_prod/common/common_settings/unibgd9-cen00-site-settings.php')) { // select default DB for users require_once('/drupal/dim_prod/common/common_settings/unibgd9-default-site-settings.php'); $mydefault = $database_credentials[$deploy_env_name]['name']; // correct require require_once('/drupal/dim_prod/common/common_settings/unibgd9-cen00-site-settings.php'); if (isset($deploy_env_name) && ($deploy_env_name == 'prod' || $deploy_env_name == 'preprod') && !empty($mydefault) ) { if($base_insecure_url != $base_url){ $databases['default']['default']['prefix'] = array( 'default' => '', 'users' => $mydefault . '.', 'users_data' => $mydefault . '.', 'users_field_data' => $mydefault . '.', 'sessions' => $mydefault . '.', 'sequences' => $mydefault . '.', ); } } } if (isset($deploy_env_name) && $deploy_env_name == 'prod' ) { $servicesFile = "services.yml"; $name = "cen00-unibgd9-d8cl5.prod.cineca.it"; if($base_insecure_url != $base_url){ if ((substr_compare($_SERVER['SERVER_NAME'], $name, -strlen($name) ) === 0)) { $servicesFile = 'services.prod.cineca.yml'; }else{ $servicesFile = 'services.prod.yml'; } } $settings['container_yamls'][] = $app_root . '/' . $site_path . '/' . $servicesFile; } if (isset($deploy_env_name) && $deploy_env_name == 'preprod' ) { $servicesFile = "services.yml"; if($base_insecure_url != $base_url){ $servicesFile = 'services.preprod.yml'; } $settings['container_yamls'][] = $app_root . '/' . $site_path . '/' . $servicesFile; }
La cosa del cookie domain è molto sensibile, quindi va considerato ogni singolo indirizzo da quelli che utilizziamo.
No cookie_domain, no shared login:
- http://default.unibgd9.d8cl5.pp.private.cineca.it/
- http://default.unibgd9.d8cl5.pp2.private.cineca.it/
- http://default.unibgd9.d8cl5.prod.private.cineca.it/
Cookie_domain, shared login :
- https://default-unibgd9-d8cl5.pp.cineca.it/
- https://default-unibgd9-d8cl5.prod.cineca.it/
- URL Definitivo
/sites/default/settings.php
if (file_exists('/drupal/dim_prod/common/common_settings/unibgd9-default-site-settings.php')) { require_once('/drupal/dim_prod/common/common_settings/unibgd9-default-site-settings.php'); if (isset($deploy_env_name) && $deploy_env_name == 'prod' ) { $servicesFile = "services.yml"; $name = "default-unibgd9-d8cl5.prod.cineca.it"; if($base_insecure_url != $base_url){ if ((substr_compare($_SERVER['SERVER_NAME'], $name, -strlen($name) ) === 0)) { $servicesFile = 'services.prod.cineca.yml'; }else{ $servicesFile = 'services.prod.yml'; } } $settings['container_yamls'][] = $app_root . '/' . $site_path . '/' . $servicesFile; } if (isset($deploy_env_name) && $deploy_env_name == 'preprod' ) { $servicesFile = "services.yml"; if($base_insecure_url != $base_url){ $servicesFile = 'services.preprod.yml'; } $settings['container_yamls'][] = $app_root . '/' . $site_path . '/' . $servicesFile; } }