Я собираюсь начать работу над прототипом для клиента, и одной из необходимых функций является интеграция с внутренней системой аутентификации / регистрации пользователей.
Эта система будет выступать в качестве авторитетной базы данных пользователей и предоставляет RESTful-интерфейс для создания новых пользователей и аутентификации действительных пользователей.
Мне нужно иметь возможность создавать новых пользователей в WP и как часть этого процесса сделать вызов API внешней аутентификации для создания / проверки этого пользователя.
Человек, который является действительным пользователем, но не известен WP, должен иметь возможность войти в систему, чтобы комментировать, без необходимости регистрации на сайте WP самостоятельно.
Человек, вошедший в общий веб-сайт, также должен автоматически войти в WordPress.
Я думаю, что следующий путь.
Для (1) - есть ли регистрационный хук, который я могу использовать?
Для (2) - я предполагаю, что я перехватываю фильтр аутентификации - то есть, когда кто-то пытается войти в систему, я перехватываю это, звоню во внешнюю систему, а затем либо обрабатываю вход в систему WP, либо перенаправляю их в процесс регистрации, где ( 1) берет эр.
Для (3) - прочитайте файл cookie для входа, установленный основным сайтом, и перейдите к (2)?
Думаю, мне также нужно вставить запись в таблицу users и usermeta.
Итак, имеет ли вышесказанное смысл - не думал ли я о чем-то. У любого есть хорошие ресурсы для помощи с этим (@hakre - я видел, что вы проделали некоторую работу над этим !!).
Обновить
Так что я все еще немного ломаю голову над этим, по сути, я пытаюсь подключиться к фильтру аутентификации и использую его для:
- проверьте, установлен ли файл cookie для входа на «основной» сайт, и если это так, выполните повторную проверку по их API аутентификации и, если он действителен, принудительно войдите в WP
wp_signon()
, используя информацию, содержащуюся в файле «cookie» основного сайта (адрес электронной почты и хешированный пароль). в качестве учетных данных для WP - если файл cookie не установлен, перенаправьте на страницу входа на главный сайт и получите логин / регистрацию, затем вернитесь к шагу 1
- если нет пользователя WP, когда существует аутентифицированный пользователь главного сайта, создайте его, а затем создайте «прозрачный» вход (т. е. чтобы пользователь не видел форму входа WP)
По сути, я хочу полностью скрыть форму входа в WP для пользователей, которые будут в основном комментировать, а позже найти способ, позволяющий авторам и администраторам получать к ней доступ напрямую.
Это происходит довольно медленно, вот что я мог бы использовать некоторую помощь:
Правильно ли использовать фильтр аутентификации? Кажется, он вызывается не во всех ситуациях, которые я ожидал - например, мета-виджет отображает ссылки входа / выхода без срабатывания аутентификации
я могу
wp_signon()
вернутьWP_User
объект (что указывает на успешность), но это не влияет на состояние входа в систему - то есть мета-виджет все равно будет отображаться при входе в систему даже после обновления.
Любая помощь с благодарностью получена :)
Ответы:
Хорошо, подход, который работает для меня, заключается в следующем:
Предположим, что основная база данных пользователей сайта является авторитетной. Основной файл cookie для входа на сайт содержит идентификатор и хэш пароля сайта.
Получите cookie-файл с основного сайта и повторно проверьте его по API аутентификации основного сайта.
Если он действителен, используйте адрес электронной почты из возвращаемого значения в качестве
'user_login'
значения для WP и пароль хешированного сайта в качестве пароля WP.Проверьте, существует ли этот пользователь в WP с помощью
wp_authenticate('user_login', 'user_pass')
. Это возвращаетWP_User
объект в случае успеха илиWP_Error
объект в случае ошибки.Если
WP_Error/is_wp_error()
, тогда используйте «использовать»wp_update_user()
для создания пользователя (или обновите пользователя с измененным паролем).Войти через
wp_set_current_user()
,wp_set_auth_cookie()
иdo_action('wp_login, id)
(Это все содержится в функции, которая прикреплена к
'init'
действию)Кажется, это работает - автоматически создаются пользователи сайта, неизвестные WP. Изменения пароля учитываются, и если cookie-файл сайта установлен и пользователь WP существует, единый вход является автоматическим и довольно плавным.
источник
Вся система аутентификации подключаема. Я предлагаю посмотреть на существующие плагины, чтобы понять, как переопределить систему. Возможно, посмотрев на некоторые плагины LDAP ?
источник
Некоторые пользовательские функции определены условно
!function_exists()
вwp-includes/pluggable.php
и легко переопределяются вашими собственными версиями.источник
Включение единого входа в WordPress заняло у меня более 18 часов борьбы, но может занять несколько минут:
По сути, вам нужно использовать https://wordpress.org/plugins/wp-force-login/ и модифицированную версию https://as.wordpress.org/plugins/jwt-authenticator/, а затем создать аутентификацию. -защищенная конечная точка на вашем главном сайте, которая генерирует JWT (JSON Web Token) и перенаправляет обратно на специальный URL-адрес вашего сайта WordPress.
Смотрите полный код здесь .
источник