問題描述

我即將開始為客户端開發原型,其中一個必需功能是與 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。