問題描述

我即將開始為客戶端開發原型,其中一個必需功能是與 in-house 使用者驗證/註冊系統整合。

該系統將作為權威使用者資料庫,並提供一個用於建立新使用者的 RESTful 介面,以及驗證有效使用者。

  1. 我需要能夠在 WP 中建立新使用者,作為該過程的一部分,呼叫外部身份驗證 API 來建立/驗證該使用者。

  2. 作為有效使用者但 WP 不知道的人員應該能夠登入評論,而不需要在 WP 站點上註冊。

  3. 登入整個網站的使用者也應該自動登入到 WordPress 。

I’m thinking the following is the way to go.

  • For (1) – is there a registration hook I can use?

  • For (2) – I’m assuming i hook the authenticate filter – ie when someone tries to login, I trap that, make a call to the external system, and then either process the WP login or redirect them to the registration process where (1) takes oer.

  • For (3) – read the login cookie set by the main site and proceed with (2) ?

我想我還需要在使用者和 usermeta 表中插入一個記錄。

那麼,上述是否有意義 – 我沒有想過什麼。任何人都有很好的資源幫助這個 (@hakre – 我看到你已經完成了一些這方面的工作) 。

Update

所以我仍然在打擊我的頭,這實際上是我試圖鉤入驗證過濾器,並使用它:

  1. 檢查是否設定了’master’ 站點的登入 cookie,如果是,則對其身份驗證 API 重新生效,如果有效,則使用主站點 cookie(電子郵件和雜湊密碼) 中包含的資訊強制使用 wp_signon()進行 WP 登入 WP 的憑證

  2. 如果未設定 cookie,請重定向到主站點登入頁面,並獲得登入/註冊,然後返回到步驟 1

  3. 如果在認證的主站點使用者存在時沒有 WP 使用者,則建立它,然後建立一個’transparent’ 登入 (即使使用者看不到 WP 登入表單)

基本上,我想將 WP 登入表單全部隱藏給那些只是主要評論的使用者,後來找到一種允許作者和管理員直接訪問的方式。

這是相當慢的,這是我可以使用一些幫助:

  • 驗證過濾器是否正確使用?在我期望的所有情況下似乎沒有被呼叫 – 例如,元小工具顯示登入/登出連結,而沒有驗證鉤子觸發

  • 我可以得到 wp_signon()返回一個 WP_User 物件 (指示成功),但它不影響登入狀態 – 即即使重新整理後,元小工具仍將顯示在”Login” 中。

任何幫助感激之情:)

最佳解決方法

好的,對我有用的方法如下:

  1. 假設主站點使用者資料庫是權威的。主站點登入 cookie 包含一個 ID 和一個站點密碼的雜湊值。

  2. 從主站點獲取 cookie,並重新對主站點的身份驗證 API 進行驗證

  3. 如果有效,請使用返回值中的電子郵件地址作為 WP 的'user_login'值,並將雜湊的站點密碼用作 WP 密碼。

  4. 使用 wp_authenticate('user_login', 'user_pass')測試該使用者是否存在於 WP 中。這將在成功時返回 WP_User 物件,或者在失敗時返回 WP_Error 物件。

  5. 如果 WP_Error/is_wp_error(),則使用 wp_update_user()建立一個使用者 (或更新一個改變密碼的使用者) 。

  6. 透過 wp_set_current_user()wp_set_auth_cookie()do_action('wp_login, id)登入

(這全部包含在附加到'init'操作的函式中)

這似乎是有效的 – WP 中未知的有效站點使用者將自動建立。密碼更改已滿足,如果設定了網站 cookie,並且 WP 使用者存在,則 SSO 是自動而且無縫的。

次佳解決方法

整個認證系統是可插拔的。我建議您檢視現有的外掛,瞭解如何覆蓋系統。也許透過看一些 LDAP plugins

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。