同上一篇文章一样,还是要解决UC中的问题,注册用户时通过 API 向第三方应用发送密码。这样第三方应用可以保存新增用户的密码信息,一旦关闭UC支持,仍然可以独立运行。
实现原理是在添加用户时,生成一个通知(note)。鉴于UC内置note类型和API中没有为“注册”做支持,我们可以使用修改密码的note:updatepw。在第三方应用的UC客户端中处理 updatepw 通知时,先在本应用内判断用户是否存在,如果不存在则创建一个新用户到本应用中。
修改 uc_server
首先还是对 uc_server 下手,保证管理在UC后台新增用户时,能够同步到其他用户。在uc_server/control/user.php 85 行:
$uid = $_ENV['user']->add_user($username, $password, $email, 0, $questionid, $answer, $regip);
后面插入:
if($uid > 0) {
$this->load('note');
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.urlencode($password).'&email='.urlencode($email));
$_ENV['note']->send();
}
uc_server/control/admin/user.php 170 行:
$uid = $_ENV['user']->add_user($username, $password, $email);
后面插入:
if($uid > 0) {
$this->load('note');
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.urlencode($password).'&email='.urlencode($email));
$_ENV['note']->send();
}
同文件 187 行 或 192 行:
$_ENV['user']->add_user($username, $password, $email);
修改为
$uid = $_ENV['user']->add_user($username, $password, $email);
if($uid > 0) {
$this->load('note');
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.urlencode($password).'&email='.urlencode($email));
$_ENV['note']->send();
}
修改 uc_client
Discuz 中 uc_client/control/user.php 79行:
$uid = $_ENV['user']->add_user($username, $password, $email);
后面插入:
if($uid > 0) {
$this->load('note');
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.urlencode($password).'&email='.urlencode($email));
$_ENV['note']->send();
}
至此,在第三方应用的 api/uc.php 中依照 UC 接口开发文档,对 updatepw 类型的通知进行适当的判断即可实现UC注册同步到其他应用。
Webmention
Comment Form
写的很不错哦!支持下!
可以试一下UC