问题描述
我即将开始为客户端开发原型,其中一个必需功能是与 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。