Cookie nonce ist ungültig – Multisite

Ich bekomme folgende Nachrichten:

Anwendung Passwort Plugin

Cookie Nonce ist ungültig

iThemes Sicherheit

Eine Nonce-Sicherheitsprüfung ist fehlgeschlagen, sodass die Anfrage nicht wie erwartet abgeschlossen werden konnte. Bitte versuche die Seite neu zu laden und versuche es erneut.

… wenn ich versuche, Einstellungen im Netzwerk (Unterverzeichnis Multisite) admin zu speichern. Aber ich bekomme diese Nachrichten nicht, wenn ich das Einstellungsfenster für ein Plugin innerhalb einer Site verwende.

Ich habe ein Debugging durchgeführt und was ich gefunden habe war, dass wp_verify_nonce () immer false zurückgibt. Das Cookie-Token stimmt niemals mit dem erwarteten Token überein. Ich habe keine Ahnung, warum WordPress sich so benimmt.

Hat jemand eine Idee, warum WordPress Nonce sich 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); 

Solutions Collecting From Web of "Cookie nonce ist ungültig – Multisite"

Ich habe das Problem gefunden.

Die Links zum Network Admin sind nicht korrekt. Zum Beispiel haben Netzwerkbenutzer:

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

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

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

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

Fix

Bearbeiten 2017-08-30 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 2017-08-30 bearbeiten

Die Art, wie ich dies getriggers habe, besteht darin, ein separates Netzwerk-Admin-Menü mit korrigierten Links zu erstellen. Dies ist keine elegante Lösung, aber ich weiß nicht, wie ich die URLs nur für das native Network Admin-Menü festlegen und den Rest der Links beibehalten soll (siehe “Andere mögliche Lösungen”) .

Meine Lösung ist ähnlich (fügen Sie entweder zu function.php im Theme hinzu oder erstellen Sie ein 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 ''; } 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, das kann vielleicht mit einer Änderung von .htaccess behoben werden. Aus verschiedenen Gründen war dies für mein Projekt keine Option. Aber wenn jemand anderes es ausprobieren möchte, hier ist 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]