問題描述
我即將開始為客户端開發原型,其中一個必需功能是與 in-house 用户驗證/註冊系統集成。
該系統將作為權威用户數據庫,並提供一個用於創建新用户的 RESTful 界面,以及驗證有效用户。
-
我需要能夠在 WP 中創建新用户,作為該過程的一部分,調用外部身份驗證 API 來創建/驗證該用户。
-
作為有效用户但 WP 不知道的人員應該能夠登錄評論,而不需要在 WP 站點上註冊。
-
登錄整個網站的用户也應該自動登錄到 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
所以我仍然在打擊我的頭,這實際上是我試圖鈎入驗證過濾器,並使用它:
-
檢查是否設置了’master’ 站點的登錄 cookie,如果是,則對其身份驗證 API 重新生效,如果有效,則使用主站點 cookie(電子郵件和散列密碼) 中包含的信息強制使用
wp_signon()進行 WP 登錄 WP 的憑證 -
如果未設置 cookie,請重定向到主站點登錄頁面,並獲得登錄/註冊,然後返回到步驟 1
-
如果在認證的主站點用户存在時沒有 WP 用户,則創建它,然後創建一個’transparent’ 登錄 (即使用户看不到 WP 登錄表單)
基本上,我想將 WP 登錄表單全部隱藏給那些只是主要評論的用户,後來找到一種允許作者和管理員直接訪問的方式。
這是相當慢的,這是我可以使用一些幫助:
-
驗證過濾器是否正確使用?在我期望的所有情況下似乎沒有被調用 – 例如,元小工具顯示登錄/註銷鏈接,而沒有驗證鈎子觸發
-
我可以得到
wp_signon()返回一個WP_User對象 (指示成功),但它不影響登錄狀態 – 即即使刷新後,元小工具仍將顯示在”Login” 中。
任何幫助感激之情:)
最佳解決方法
好的,對我有用的方法如下:
-
假設主站點用户數據庫是權威的。主站點登錄 cookie 包含一個 ID 和一個站點密碼的哈希值。
-
從主站點獲取 cookie,並重新對主站點的身份驗證 API 進行驗證
-
如果有效,請使用返回值中的電子郵件地址作為 WP 的
'user_login'值,並將散列的站點密碼用作 WP 密碼。 -
使用
wp_authenticate('user_login', 'user_pass')測試該用户是否存在於 WP 中。這將在成功時返回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 用户存在,則 SSO 是自動而且無縫的。
次佳解決方法
整個認證系統是可插拔的。我建議您查看現有的插件,瞭解如何覆蓋系統。也許通過看一些 LDAP plugins?
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。