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
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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;
}
} |