2012-03-20 2 views
2

Я работаю над многоузловой установкой WPMU, но столкнулся с проблемой wee.Wordpress WPMU Консистенция входа в многопользовательскую сеть

Я создаю пользователя во время процесса регистрации в моем основном домене. Что-то вроде следующего.

$username = 'myname-'.time(); 
$user_id = wpmu_create_user($username,'anypassword','[email protected]'); 

add_user_to_blog(1, 5, 'subscriber'); 

$user = wp_signon(array(
"user_login" => $username, 
"user_password" => 'anypassword', 
"remember" => true 
)); 

Что я могу сделать, это создать пользователя, а затем назначить его только на основной домен и зарегистрировать пользователя с использованием wp_signon. Тем не менее, при посещении дочернего сайта сети в субдомене, что очень важно в его доступе. Я все еще вошел в систему, и меню панели инструментов наверху все еще отображается.

Я использовал is_user_blog(), чтобы попытаться определить, должен ли пользователь видеть это и может направить их на страницу входа в домен. Но это означало бы прекращение существующего сеанса входа в основной домен. В идеале было бы здорово, если бы вы вошли в основной домен и также вошли в поддоменю, но оба были обработаны отдельно.

Кто-нибудь сталкивался с этой проблемой раньше?

+1

Там есть ошибка в вашем примере кода. Это должно быть 'add_user_to_blog (1, $ user_id, 'подписчик');'. – brasofilo

ответ

1

Да, у меня была эта проблема. И, если вам нужно специальное управление пользователями, вам нужно будет установить новую автономную (одностраничную) установку WordPress.

Так работает Multisite. Все пользователи автоматически включаются как subscribers всех сайтов в сети.

Из статьи Don't Use WordPress Multisite:

Если вам нужно, чтобы пользователи на разных сайтах, но не знают, что они в сети, не используйте MultiSite! Теперь, да, есть способы обойти это, однако это кошмар одитинга для любой крупной компании и риск безопасности, о котором вы должны знать, прежде чем начать.

Этот плагин может помочь (но не уверен): Multisite User Management.

От this recent answer я дал на WordPress StackExchange, некоторое маленькое хаки может быть полезно:
(я сделал небольшие тесты в моей среде разработки, но, пожалуйста, тест широко)

/* 
* Redirect users that are not members of the current blog to the home page, 
* if they try to access the profile page or dashboard 
* (which they could, as they have subscriber privileges) 
* http://not-my-blog.example.com/wp-admin/profile.php 
*/ 
add_action('admin_init', 'wpse_57206_admin_init'); 

function wpse_57206_admin_init() 
{ 
    if(!is_user_member_of_blog()) 
    { 
     wp_redirect(home_url()); 
     exit(); 
    } 
} 


/* 
* Redirect users that are not members of the current blog to the home page, 
* if they try to access the admin 
* http://not-my-blog.example.com/wp-admin/ 
*/ 
add_action('admin_page_access_denied', 'wpse_57206_access_denied'); 

function wpse_57206_access_denied() 
{ 
    wp_redirect(home_url()); 
    exit(); 
} 


/* 
* Redirect users that are not members of the current blog to the home page, 
* if they try to login 
* http://not-my-blog.example.com/wp-login.php 
*/ 
add_filter('login_redirect', 'wpse_57206_login_redirect'); 

function wpse_57206_login_redirect($url) 
{ 
    global $user; 
    if (!is_user_member_of_blog()) 
    { 
     $url = home_url(); 
    } 
    return $url; 
} 


/* 
* Hide the admin bar for users which are not members of the blog 
*/ 
add_filter('show_admin_bar', 'wpse51831_hide_admin_bar'); 

function wpse51831_hide_admin_bar($bool) 
{ 
    if(!is_user_member_of_blog()) 
    { 
     $bool = false; 
    } 
    return $bool; 
}