Вопрос или проблема
В моем мультисайте я использую специальную регистрацию блога с помощью:
wpmu_signup_blog($domain, $path, $blog_title, $user_name, $user_email, $meta);
и создание сайта проходит успешно.
Я хочу, чтобы пользователи автоматически входили в свою панель администратора сайта при регистрации, для этого я использую:
$creds = array();
$creds['user_login'] = $_POST['username'];
$creds['user_password'] = $_POST['password'];
$creds['remember'] = true;
$user = wp_signon( $creds, false );
if ( is_wp_error($user) )
echo $user->get_error_message();
Но это возвращает ошибку:
ОШИБКА: Введенный пароль для имени пользователя mysite неверен. Забыли пароль?
Мне нужно автоматическое вход без использования плагина!!!
Пожалуйста, помогите…
Надеюсь, это поможет кому-то. После часов отладки я выяснил, что в настройках мультисайта wp_signon($creds, false) не будет вас авторизовывать. Так что вам следует делать одно из двух:
$user = wp_signon ($creds, false);
wp_set_auth_cookie($user->ID);
или
$user = wp_signon ($creds, true);
Поскольку вы входите в систему после успешного создания блога, переменная $_POST
не будет содержать ожидаемых значений.
Используйте wp_set_auth_cookie( $user_id );
, чтобы авторизовать пользователя, вам не нужно проверять учетные данные для входа в вашем случае.
Мне пришлось столкнуться с той же проблемой, но для кастомно созданных ролей. Присвоение им разрешения на чтение решило мою проблему.
Ответ или решение
Конечно! Вот подробное объяснение и решение проблемы с автоматической авторизацией пользователей в админ-панели сайта после регистрации в WordPress Multisite.
Проблема с wp_signon в мультисайте
Если у вас возникла ошибка при попытке автозалогиниться с помощью функции wp_signon( $creds, false );
, это может быть связано с особенностями работы мультисайта в WordPress. Ваша текущая реализация возвращает ошибку вроде:
ERROR: The password you entered for the username mysite is incorrect. Lost your password?
Это может произойти из-за нескольких причин:
- Неверные учетные данные: Убедитесь, что передаваемые вами имя пользователя и пароль корректны, но так как вы создаете новую учетную запись, это вряд ли причина.
- Используйте
wp_set_auth_cookie()
: При создании нового сайта и пользователя в мультисайте не всегда требуется проверка учетных данных черезwp_signon
. Многие разработчики сталкиваются с этой проблемой, и вместо того, чтобы проверять логин и пароль, можно просто установить аутентификационный кукис.
Решение проблемы
Вот как вы можете изменить ваш код, чтобы избежать использования wp_signon
и автоматически авторизовать нового пользователя:
- Сначала создайте сайт с помощью
wpmu_signup_blog
, как вы уже делаете. - Затем используйте
wp_set_auth_cookie()
для авторизации пользователя.
Пример кода:
// Создание блога (ваш код)
$blog_id = wpmu_signup_blog($domain, $path, $blog_title, $user_name, $user_email, $meta);
if ( ! is_wp_error( $blog_id ) ) {
// Получаем объект пользователя
$user = get_user_by('login', $user_name);
if ( $user ) {
// Устанавливаем куки для авторизации
wp_set_auth_cookie( $user->ID, true );
// Дополнительно, вы можете перенаправлять пользователя на админ-панель
wp_redirect( admin_url() );
exit;
}
} else {
// Обработка ошибок создания блога
echo $blog_id->get_error_message();
}
Примечания
- Убедитесь, что у вашего нового пользователя есть все необходимые роли и права доступа. Если вы создаете пользователей с пользовательскими ролями, не забудьте назначить им необходимые возможности, такие как
read
, чтобы избежать проблем с доступом. - Если ваш пользователь все еще не может зайти, проверьте, что он существует в базе данных и что у него установлен корректный пароль.
- Также вы можете использовать дополнительные функции для отладки, чтобы выяснить, что именно идет не так с аутентификацией.
Заключение
С помощью вышеописанного решения вы сможете автоматически авторизовать пользователей после успешного создания блога в мультисайте WordPress без использования дополнительных плагинов. Если у вас возникли дополнительные вопросы или проблемы, не стесняйтесь обращаться за помощью.