it-swarm-eu.dev

Neplatný soubor cookie je neplatný - více stránek

Mám následující zprávy:

Zásuvné heslo pro přihlášení

Neplatné soubory cookie jsou neplatné

iThemes Bezpečnost

Kontrola zabezpečení nonce se nezdařila a bránila dokončení požadavku podle očekávání. Zkuste stránku znovu načíst a zkuste to znovu.

... když se pokouším uložit nastavení v síti (podadresář multisite) admin. Tyto zprávy ale nedostávám, pokud používám panel nastavení pro plugin v rámci webu.

Udělal jsem nějaké ladění a zjistil jsem, že wp_verify_nonce () vždy vrátí false. Token cookie nikdy neodpovídá očekávanému tokenu. Nemám ponětí, proč se Wordpress takto chová.

Má někdo nápad, proč se Wordpress nonce chová tímto způsobem? Jak to mohu opravit?

Používám Bedrock a tady je moje nastavení:

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

Našel jsem problém.

Odkazy na Network Admin jsou nesprávné. Uživatelé sítě například:

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

Mělo by to být (pokud je wordpress jádro umístěno v backendu /)

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

Pokud navštívíte první odkaz a přidáte/backend/before wp-admin v prohlížeči, pak se správce sítě bude chovat správně.

Oprava

Edit 2017-08-30 Nové řešení:

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

konec roku 2017-08-30 upravit

Způsob, jakým jsem se rozhodl vyřešit, je vytvořit oddělené menu síťového administrátora s opravenými odkazy. Toto není elegantní řešení, ale nevím, jak opravit adresy URL pouze pro nativní nabídku Správce sítě a ponechat zbytek odkazů neporušený (viz „Další potenciální řešení“).

Moje řešení je podobné tomuto (přidejte k tématu function.php nebo vytvořte 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);
}

Další potenciální řešení

Pokud máte (sub) doménu instalaci více stanic, zaškrtněte "felixarntz/multisite-fixes" na Githubu (mu-plugins/wpms-site-url-fixer.php).

Myslím, že to může být vyřešeno změnou .htaccess. Z mnoha důvodů to pro můj projekt nebylo možné. Pokud ale někdo jiný chce jít, zde je příklad .htaccess pro 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