Intereting Posts
wp_mail () не работает на сервере Заказывать сообщения с помощью meta_value, даже если meta_key не заполняется Отключить автоформатирование TinyMCE Темы по умолчанию стили переопределяют собственный CSS-код плагина функция даты неверно возвращает дату настраиваемый плагин – настраиваемый тип сообщения – выбираемые параметры для пользователя Предел символов w / Excerpt удаляет изображения Почему? Что такое sql для этого условия? Есть ли способ исключить содержимое из переменной post, чтобы сэкономить на использовании ОЗУ? получать сообщения, основанные на метаоценке автора Сообщения в блоге в пользовательском меню add_query_vars и канонические ссылки Как обновить статус страницы из публикации в черновик и черновик Можно ли отображать панель администратора в Настройке темы? Целевая страница редактирования типа сообщения, чтобы изменить кнопку отправки сообщения, как мне это сделать?

Замена проверки пароля WordPress

У меня есть настраиваемое приложение с тысячами пользователей, у которых уже есть пароль. Я хотел бы создать собственный сайт WordPress, который будет сопровождать это приложение, и использовать имена пользователей и зашифрованные пароли, которые уже существуют в этой базе данных.

Есть ли способ настроить WordPress не использовать обычный список пользователей, а вместо этого проверять имена пользователей и пароли на другую базу данных на другом сервере?

У нас есть команда разработчиков, поэтому, если бы был способ написать код, чтобы подключиться к процессу входа в систему, это было бы приемлемо. У кого-нибудь есть опыт с этим, или есть предложения о том, где искать?

Solutions Collecting From Web of "Замена проверки пароля WordPress"

Исследуя authenticate фильтра, мы можем обнаружить, что он вызван внутри функции wp_authenticate , которая является функцией подключения .

Это означает, что его можно заменить одним из наших собственных решений.

Это оригинальная функция плюс отмеченная точка входа:

 function wp_authenticate($username, $password) { $username = sanitize_user($username); $password = trim($password); $user = apply_filters('authenticate', null, $username, $password); /* ENTRY POINT */ if ( $user == null ) { // TODO what should the error message be? (Or would these even happen?) // Only needed if all authentication handlers fail to return anything. $user = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.')); } $ignore_codes = array('empty_username', 'empty_password'); if (is_wp_error($user) && !in_array($user->get_error_code(), $ignore_codes) ) { do_action('wp_login_failed', $username); } return $user; } 

Тест был выполнен, создав функцию wp_authenticate внутри плагина Must Use . В этой точке ввода я поставил следующее:

 global $wpdb; $table = $wpdb->prefix . 'my_users'; $parent = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $table WHERE name='$username'" ) ); if( $username == $parent->name && $password == $parent->password ) $user = get_user_by( 'id', $parent->id ); 

Таблица wp_my_users – простая тестовая таблица, пароль – даже обычный текст.
таблица демонстрационных пользователей


Дело в том, как полностью построить объект $user на основе пользовательской таблицы. Или, если это возможно или целесообразно …

Потому что в этом тесте идентификатор пользователей одинаковый, поэтому мы возвращаем ( get_user_by ) к WordPress пользователю из своей таблицы wp_users , но с учетными данными, wp_my_users в пользовательской таблице wp_my_users .


Примечания :

Этот ответ не выходит за рамки анализа и взлома функции wp_authenticate . Не учитывается безопасность, управление паролями или таблица wp_usermeta .

Для справки, это содержание $user :

 user | WP_User Object ( [data] => stdClass Object ( [ID] => 1 [user_login] => rod [user_pass] => $P$BQ8qnb3iYPRzisxYHUKq5X/GCQqhoz1 [user_nicename] => rod [user_email] => name@email.com [user_url] => [user_registered] => 2012-09-21 14:39:01 [user_activation_key] => [user_status] => 0 [display_name] => rod ) [ID] => 1 [caps] => Array ( [administrator] => 1 ) [cap_key] => wp_capabilities [roles] => Array ( [0] => administrator ) [allcaps] => Array ( [switch_themes] => 1 [edit_themes] => 1 [activate_plugins] => 1 [edit_plugins] => 1 [edit_users] => 1 [edit_files] => 1 [manage_options] => 1 [moderate_comments] => 1 [manage_categories] => 1 [manage_links] => 1 [upload_files] => 1 [import] => 1 [unfiltered_html] => 1 [edit_posts] => 1 [edit_others_posts] => 1 [edit_published_posts] => 1 [publish_posts] => 1 [edit_pages] => 1 [read] => 1 [level_10] => 1 [level_9] => 1 [level_8] => 1 [level_7] => 1 [level_6] => 1 [level_5] => 1 [level_4] => 1 [level_3] => 1 [level_2] => 1 [level_1] => 1 [level_0] => 1 [edit_others_pages] => 1 [edit_published_pages] => 1 [publish_pages] => 1 [delete_pages] => 1 [delete_others_pages] => 1 [delete_published_pages] => 1 [delete_posts] => 1 [delete_others_posts] => 1 [delete_published_posts] => 1 [delete_private_posts] => 1 [edit_private_posts] => 1 [read_private_posts] => 1 [delete_private_pages] => 1 [edit_private_pages] => 1 [read_private_pages] => 1 [delete_users] => 1 [create_users] => 1 [unfiltered_upload] => 1 [edit_dashboard] => 1 [update_plugins] => 1 [delete_plugins] => 1 [install_plugins] => 1 [update_themes] => 1 [install_themes] => 1 [update_core] => 1 [list_users] => 1 [remove_users] => 1 [add_users] => 1 [promote_users] => 1 [edit_theme_options] => 1 [delete_themes] => 1 [export] => 1 [administrator] => 1 ) [filter] => ) 

На самом деле вы можете обойти механизм входа wordpress пользователем входа в систему автоматически (после того, как они успешно прошли учетные данные с другого веб-сайта, например) с помощью этой функции: wp_set_auth_cookie ($ user_id);

например, с этим вы входите в систему admin (пользователь с id = 1)

 wp_set_auth_cookie(1); //after this admin is logged in 

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

Простейший метод

 add_filter( 'authenticate', 'my_auth', 10, 3 ); function my_auth( $user, $username, $password ){ // your validation here. return $user; } 

Я думаю, что этот плагин External Database Authentication соответствует вашим потребностям. Оттуда вы можете включить уже зарегистрированных пользователей, которые устанавливают cookie при входе в систему только с помощью wp_set_auth_cookie как говорит @Roman.