我即将开始为客户机开发一个原型,其中一个必需的功能是与内部用户身份验证/注册系统集成。
该系统将充当权威用户数据库,并为创建新用户和验证有效用户提供RESTful界面。
我需要能够在WP中创建新用户,并且作为该过程的一部分,调用外部身份验证API来创建/验证该用户。
有效用户但WP未知的人应该能够登录评论,而无需自己在WP网站上注册。
登录整个网站的人也应自动登录WordPress。
我认为下面是一条路。
(1)是否有注册挂钩可以使用?
对于(2)-我假设我挂接了身份验证过滤器-即当有人尝试登录时,我会捕获该过滤器,调用外部系统,然后处理WP登录或将其重定向到注册过程,其中(1)需要oer。
对于(3)-阅读主站点设置的登录cookie并继续(2)?
我想我还需要在users和usermeta表中插入一条记录。
那么,以上这些有意义吗?难道我没有想过什么吗。任何人都有很好的资源来帮助这项工作(@hakre-我看到你在这方面做了一些工作!!)。
更新,所以我仍在对此进行抨击,基本上我正在尝试连接到身份验证过滤器,并使用它来:
检查是否设置了“主”站点的登录cookie,如果设置了,则根据其身份验证API重新验证,如果有效,则使用wp_signon()
,使用主站点cookie中包含的信息(电子邮件和哈希密码)作为WP的凭据如果未设置cookie,请重定向到主站点登录页面并获取登录/注册,然后返回步骤1,如果存在经过身份验证的主站点用户,则不存在WP用户,创建它,然后进行“透明”登录(即让用户看不到WP登录表单)基本上,我想为主要发表评论的用户完全隐藏WP登录表单,然后找到一种允许作者和管理员直接访问它的方法。
进展相当缓慢,以下是我需要的帮助:
验证筛选器是否正确使用?它似乎并不是在我所期望的所有情况下都会被调用-例如,meta小部件显示登录/注销链接,而不触发authenticate挂钩
我可以wp_signon()
返回WP_User
对象(表示成功),但它不会影响登录状态-即meta小部件仍将显示在“中”;“登录”;即使在刷新之后。
感谢您的帮助:)
最合适的回答,由SO网友:anu 整理而成
好的,对我有效的方法如下:
假设主站点用户数据库是权威的。主站点登录cookie包含站点密码的ID和哈希。
从主站点获取cookie,并根据主站点的身份验证API重新验证它
如果有效,请使用返回值中的电子邮件地址作为\'user_login\'
WP的值,哈希站点密码作为WP密码。
使用以下方法测试WP中是否存在此用户wp_authenticate(\'user_login\', \'user_pass\')
. 这将返回WP_User
对象,或WP_Error
对象失败。
如果WP_Error/is_wp_error()
, 然后使用usewp_update_user()
创建用户(或使用更改的密码更新用户)。
通过登录wp_set_current_user()
, wp_set_auth_cookie()
和do_action(\'wp_login, id)
(这些都包含在附加到\'init\'
行动)
这似乎是可行的-自动创建WP未知的有效站点用户。密码更改是为了满足需要,如果设置了站点cookie,并且WP用户存在,那么SSO是自动的,而且非常无缝。