Как войти один раз во всю сеть WordPress Multisite

30 июл. 2015 г., 15:13:44
Просмотры: 16.4K
Голосов: 3

Кто-нибудь знает хороший плагин, который позволяет войти один раз как Super Admin в сети WP-MS и переключаться между сайтами без необходимости повторного входа в каждую сеть и/или каждый сайт индивидуально?

Спасибо

0
Все ответы на вопрос 3
12

Это связано с доменом cookie. Он устанавливается для каждого домена, что предотвращает вход в систему для всей сети. Вы можете попробовать установить константу COOKIE_DOMAIN в вашем файле wp-config.php.

Например, установка пустого значения, что предотвращает изменение WordPress домена cookie для каждого сайта:

define( 'COOKIE_DOMAIN', '' );

Возможно, вам также потребуется установить некоторые другие константы, чтобы это заработало.

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

Не спрашивайте меня о недостатках, потому что я не совсем уверен в этом.

Или вы можете установить один конкретный домен cookie для всех сайтов:

define( 'COOKIE_DOMAIN', 'example.com' );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH', '/' );
define( 'SITECOOKIEPATH', '/' );

Вероятно, также будет хорошей идеей установить уникальный хэш cookie:

define( 'COOKIEHASH', 'unique_cookie_hash_string' );

На случай, если у вас есть другие установки WordPress, использующие тот же домен для cookie.

Обновление:

Из страницы GitHub плагина WP Multi Network я получил это:

Единый вход

Добавьте что-то подобное в ваш wp-config.php, чтобы использовать общие cookie на всех сайтах и сетях.

// Cookies
define( 'COOKIEHASH',        md5( 'yourdomain.com' ) );
define( 'COOKIE_DOMAIN',     'yourdomain.com'        );
define( 'ADMIN_COOKIE_PATH', '/' );
define( 'COOKIEPATH',        '/' );
define( 'SITECOOKIEPATH',    '/' );
define( 'TEST_COOKIE',        'thing_test_cookie' );
define( 'AUTH_COOKIE',        'thing_'          . COOKIEHASH );
define( 'USER_COOKIE',        'thing_user_'     . COOKIEHASH );
define( 'PASS_COOKIE',        'thing_pass_'     . COOKIEHASH );
define( 'SECURE_AUTH_COOKIE', 'thing_sec_'      . COOKIEHASH );
define( 'LOGGED_IN_COOKIE',   'thing_logged_in' . COOKIEHASH );

Судя по всему, это общие настройки WordPress, а не специфичные для плагина, так что стоит попробовать. Возможно, мы сделали недостаточно.

30 июл. 2015 г. 15:51:51
Комментарии

Это не сработало, @ialocin. Я вошел в свою основную сеть WP Core/Base. Затем, когда я переключился на другую сеть, мне снова показали экран входа.

tammy tammy
31 июл. 2015 г. 23:39:00

Жаль, я добавил дополнительную информацию в свой ответ. Надеюсь, это поможет, потому что иначе лично я больше ничего не могу вам сказать. Остальное вам придется пробовать и исследовать самостоятельно. @tammy

Nicolai Grossherr Nicolai Grossherr
2 авг. 2015 г. 11:39:45

Хорошо, спасибо @ialocin — я попробую эти варианты и отпишусь

tammy tammy
3 авг. 2015 г. 15:13:40

Тест #1 (код ниже) -- это не сработало. Я успешно вошел в основную/главную сеть как Супер Администратор. Затем при переключении на другую сеть мне снова показали экран входа. define('COOKIE_DOMAIN', ''); define('ADMIN_COOKIE_PATH', '/'); define('COOKIEPATH', ''); define('SITECOOKIEPATH', '');

tammy tammy
3 авг. 2015 г. 15:49:13

Тест #2 (код ниже) -- это тоже не сработало. Я успешно вошел в основную/главную сеть как Супер Администратор. Затем при переключении на другую сеть мне снова показали экран входа. define('COOKIE_DOMAIN', 'my-main-wp-network-site.com'); define('ADMIN_COOKIE_PATH', '/'); define('COOKIEPATH', '/'); define('SITECOOKIEPATH', '/');

tammy tammy
3 авг. 2015 г. 15:51:51

Возможно, мне стоит создать собственный плагин для реализации этой функциональности.

tammy tammy
3 авг. 2015 г. 15:53:13

Сделаю, @ialocin. Я дам вам знать, когда плагин будет написан и протестирован. Сейчас это не в приоритете, поэтому может занять несколько недель.

tammy tammy
3 авг. 2015 г. 16:23:10

это две разные сети WP? Или одна сеть сайтов, работающих на одной кодовой базе?

Alex Older Alex Older
3 авг. 2015 г. 17:59:11

В настоящее время у меня более десятка сетей, каждая с одним сайтом внутри, @AlexOlder. Супер-админ имеет доступ к каждой сети в моей установке WP. Поэтому я просто хочу входить в WP один раз — то есть для всех сетей сегодня, завтра и в будущем. Надеюсь, это проясняет ситуацию.

tammy tammy
3 авг. 2015 г. 23:28:36

@tammy это не так. Если у вас есть дюжина разных сетевых настроек, то нет безопасного и надежного способа войти во все из них одновременно.

Если это дюжина сайтов на одной установке WP, то при входе вы должны быть авторизованы в рамках одной сети.

Alex Older Alex Older
5 авг. 2015 г. 13:35:17

Именно так @AlexOlder -- отсюда и необходимость написать мой собственный плагин. Спасибо. Если вы напишете это как ответ... я выберу его, чтобы закрыть эту ветку.

tammy tammy
5 авг. 2015 г. 15:32:00

Настройки из Github работают нормально для меня. Но это в рамках ОДНОЙ мультисайтовой установки, чего я и ожидал.

omega33 omega33
20 дек. 2022 г. 00:46:31
Показать остальные 7 комментариев
1

@tammy это не так. Если у вас есть десяток разных настроек сети, то не существует безопасного и надежного способа войти во все из них одновременно. Если это десяток сайтов на одной установке WordPress, то при входе вы должны быть авторизованы в рамках одной сети.

– Алекс Олдер 5 августа в 10:35

17 авг. 2015 г. 17:06:50
Комментарии

Спасибо, @AlexOlder — это именно тот ответ, который я искал...

tammy tammy
17 авг. 2015 г. 17:07:51
2

Начиная с WordPress 4.2.4, при стандартной мультисайтовой установке с плагином MU Domain Mapping 0.5.5 Development и плагином Multisite User Management 1.1, вход через основной домен авторизует пользователя на всех сайтах, к которым он привязан (на всех сайтах как суперадминистратор). Однако пользователь должен посетить дочерний сайт, чтобы установить cookie и авторизацию, что произойдет автоматически. К счастью, можно добавить обходное решение для выхода пользователя со всех сайтов, если он посещал дочерний сайт во время авторизации на основном домене. В настоящее время по умолчанию выход не происходит со всех сайтов. Вот что можно добавить в файл functions.php вашей темы, чтобы уничтожить сессии пользователя во всей сети при выходе:

function clear_session_on_logout() {

$current_user = wp_get_current_user();

// получаем все сессии для пользователя с ID $user_id
$sessions = WP_Session_Tokens::get_instance($current_user->ID);

// получили сессии — уничтожаем их все!
$sessions->destroy_all();
}
add_action('clear_auth_cookie', 'clear_session_on_logout');

Также рекомендуется обновить тему для всей сети или темы, используемые на дочерних сайтах, чтобы вход и выход происходили через wp-admin/ основного домена. Однако если требуется, чтобы пользователь выходил с каждого дочернего сайта «в случае посещения» во время авторизации на основном домене, то стандартного хука выхода будет достаточно.

Для справки: если вы входите на дочерний сайт под учетной записью суперадминистратора, это не приведет к автоматическому входу на все сайты. Думаю, это сделано намеренно, и легко исправляется модификацией темы, чтобы вход и выход всегда использовали основной домен. Если же предпочтительнее перенаправлять обратно на дочерний домен при входе и выходе, можно также реализовать простой хук для этого.

7 авг. 2015 г. 17:49:48
Комментарии

Также я обнаружил раздражающую особенность в стандартном выпадающем меню "Мои сайты" в wp-admin панели: оно перенаправляет вас в wp-admin/ дочернего сайта, что заставляет любого пользователя (включая супер-администратора) снова авторизовываться на дочернем сайте, даже если он уже авторизован на основном домене (странно). Если вы посетите любую другую страницу, кроме директории wp-admin/ дочернего сайта, пользователь будет авторизован автоматически, и административная панель появится. Простое решение для wp-admin панели — изменить ссылки в выпадающем меню, чтобы они вели к site_url(); дочернего сайта.

Zach Goldsmith Zach Goldsmith
7 авг. 2015 г. 18:17:03

Спасибо, @ZachGoldsmith, что подключились к обсуждению. Я ищу единую систему входа для всех моих сетей... а не только для сайтов внутри каждой сети. Поэтому я начал писать собственный модуль входа, чтобы реализовать это, так как не смог найти готового решения.

tammy tammy
7 авг. 2015 г. 22:17:32