it-swarm.com.de

Cookie nonce ist ungültig - Multisite

Ich erhalte folgende Meldungen:

Anwendungs-Passwort-Plugin

Cookie nonce ist ungültig

iThemes-Sicherheit

Eine Nonce-Sicherheitsüberprüfung ist fehlgeschlagen, sodass die Anforderung nicht wie erwartet ausgeführt werden kann. Bitte laden Sie die Seite neu und versuchen Sie es erneut.

... wenn ich versuche, Einstellungen im Netzwerk (Unterverzeichnis Multisite) Admin zu speichern. Ich erhalte diese Meldung jedoch nicht, wenn ich das Einstellungsfeld für ein Plugin innerhalb einer Site verwende.

Ich habe einige Fehler behoben und festgestellt, dass wp_verify_nonce () immer false zurückgibt. Das Cookie-Token stimmt nie mit dem erwarteten Token überein. Ich habe keine Ahnung, warum sich Wordpress so verhält.

Hat jemand eine Idee, warum sich Wordpress nonce so verhält? Wie kann ich es reparieren?

Ich benutze Bedrock und hier sind meine Einstellungen:

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

Ich habe das Problem gefunden.

Die Links zum Netzwerkadministrator sind falsch. Beispielsweise haben Netzwerkbenutzer:

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

Es sollte sein (wenn WordPress Core im Backend/liegt)

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

Wenn Sie den ersten Link besuchen und im Browser/backend/vor wp-admin hinzufügen, verhält sich der Netzwerkadministrator korrekt.

Fix

Bearbeiten 30.08.2017 Neue Lösung:

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

Ende des 30.08.2017

Ich habe mich dazu entschieden, ein separates Netzwerkadministrationsmenü mit korrigierten Links zu erstellen. Dies ist keine elegante Lösung, ich weiß jedoch nicht, wie ich die URLs nur für das native Netzwerkadministrator-Menü korrigieren und die restlichen Links intakt lassen soll (siehe "Weitere mögliche Lösungen")..

Meine Lösung ist ähnlich wie folgt (entweder zu function.php in theme hinzufügen oder ein Plugin erstellen):

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

Andere mögliche Lösungen

Wenn Sie eine (Sub-) Domain-Multisite-Installation haben, überprüfen Sie "felixarntz/multisite-fixes" auf Github (mu-plugins/wpms-site-url-fixer.php).

Ich denke, vielleicht kann dies mit einer Änderung in .htaccess behoben werden. Aus mehreren Gründen war dies keine Option für mein Projekt. Aber wenn jemand anderes es versuchen möchte, ist hier ein Beispiel für .htaccess für 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