web-dev-qa-db-fra.com

Cookie nonce non valide - Multisite

Je reçois les messages suivants:

Applicaiton mot de passe plugin

Cookie nonce est invalide

iThemes Sécurité

Une vérification de sécurité nonce a échoué, empêchant la requête de se terminer comme prévu. Essayez de recharger la page et essayez à nouveau.

... lorsque j'essaie de sauvegarder les paramètres dans le réseau (sous-répertoire multisite), admin. Mais je ne reçois pas ce message si j'utilise le panneau de configuration pour un plugin au sein d'un site.

J'ai fait du débogage et j'ai constaté que wp_verify_nonce () renvoie toujours false. Le jeton cookie ne correspond jamais au jeton attendu. Je ne sais pas pourquoi Wordpress se comporte de cette façon.

Quelqu'un a-t-il une idée de la raison pour laquelle Wordpress nonce se comporte de la sorte? Comment puis-je le réparer?

J'utilise Bedrock et voici mes réglages:

define('WP_HOME', 'http://my-local-cms.dev');
define('WP_SITEURL', 'http://my-local-cms.dev/backend');
define('CONTENT_DIR', '/app');

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

define('WP_ALLOW_MULTISITE', true);
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
define('DOMAIN_CURRENT_SITE', 'my-local-cms.dev');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
1
Eric Wallmander

J'ai trouvé le problème.

Les liens vers l'administrateur réseau sont incorrects. Par exemple, les utilisateurs du réseau ont:

http://my-local-cms.dev/wp-admin/network/

Il devrait être (si wordpress core est situé dans le backend /)

http://my-local-cms.dev/backend/wp-admin/network/

Si vous visitez le premier lien et ajoutez/backend/before wp-admin dans le navigateur, l'administrateur du réseau se comportera correctement.

Correction

Edit 2017-08-30 Nouvelle solution:

public function fix_network_admin_url($path, $scheme) {
    $path = ltrim($path, '/');
    return str_replace('/wp-admin/network', '/backend/wp-admin/network', $path);
}
add_filter('network_admin_url','fix_network_admin_url', 10, 3);

fin du 2017-08-30 modifier

La façon dont j'ai choisi de résoudre ce problème consiste à créer un menu administrateur réseau séparé avec des liens corrigés. Ce n'est pas une solution élégante, mais je ne sais pas comment corriger les URL uniquement pour le menu natif de l'administrateur réseau et laisser le reste des liens intact (voir "Autres solutions potentielles")..

Ma solution est similaire à celle-ci (ajoutez à function.php dans le thème ou créez un plugin):

add_action('admin_head', 'admin_head_network_menu');
add_action('admin_bar_menu', 'custom_network_admin_bar_menu', 20);

function admin_head_network_menu()
{
    echo '<style type="text/css">#wp-admin-bar-my-sites-super-admin {display: none}</style>';
}

function custom_network_admin_bar_menu($adminBar)
{
    // Don't add network admin bar for non super admins
    if (!current_user_can('manage_network')) {
        return;
    }

    $mainMenuID = 'my-new-network-admin-menu';

    $adminBar->add_menu([
        'id' => $mainMenuID,
        'title' => __('Network Admin'),
        'href' => new_admin_url(),
    ]);

    $adminBar->add_menu([
        'id' => $mainMenuID.'-sites',
        'parent' => $mainMenuID,
        'title' => __('Network Sites'),
        'href' => new_admin_url('sites.php'),
    ]);

    $adminBar->add_menu([
        'id' => $mainMenuID.'-users',
        'parent' => $mainMenuID,
        'title' => __('Network Users'),
        'href' => new_admin_url('users.php'),
    ]);

    $adminBar->add_menu([
        'id' => $mainMenuID.'-plugins',
        'parent' => $mainMenuID,
        'title' => __('Network Plugins'),
        'href' => new_admin_url('plugins.php'),
    ]);

    $adminBar->add_menu([
        'id' => $mainMenuID.'-settings',
        'parent' => $mainMenuID,
        'title' => __('Network Settings'),
        'href' => new_admin_url('settings.php'),
    ]);
}

function new_admin_url($path = '')
{
    $url = network_admin_url($path);
    return str_replace('/wp-admin/network', '/backend/wp-admin/network', $url);
}

Autres solutions possibles

Si vous avez une installation multisite de domaine (sous-domaine), consultez "felixarntz/multisite-fixes" sur Github (mu-plugins/wpms-site-url-fixer.php).

Je pense que peut-être cela peut être corrigé avec un changement de .htaccess. Pour un certain nombre de raisons, ce n'était pas une option pour mon projet. Mais si quelqu'un d'autre veut tenter sa chance, voici un exemple .htaccess pour Bedrock:

RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
0
Eric Wallmander