通过ucenter整合discuz和phpcms,在discuz修改用户密码,ucenter通知失败,phpcms无法同步更新密码
2015-01-13 11:02
716 查看
环境:
discuz:
phpcms:
PHPCMS程序版本:Phpcms V9.5.7 Release 20140625
操作系统:Linux
服务器软件:nginx/1.1.16PHP/5.3.27
MySQL 版本:5.5.34-log
问题:
通过ucenter整合disucz和phpcms,在discuz上修改用户密码,无法通知到phpcms,在ucenter后台的数据列表中查看通知列表,发现通知失败,尝试点击Discuz! Board列下的通知失败链接,返回通知成功,而点击phpcms_v9下的通知失败链接,仍返回通知失败。
原因:
经过逐步调试,发现uc_server/model/note.php文件中的sendone函数下的$response 返回值为空,因此判断问题有可能出现在dfopen2函数上
解决办法:
修改uc_server/model/misc.php文件中的dfopen函数(dfopen2函数调用dfopen函数)
找到代码
把上面这段代码所属的if判断全部替换为下面这一段
为什么要注释掉
fsockopen函数和pfsockopen函数因存在安全问题,已被服务器禁用,所以现在一般是用stream_socket_client函数进行代替(可以查看文章PHPCMS无法登录、注册)
另外:
如果在discuz修改密码时,发现通知的密码为空,则修改ucenter客户端(uc_client)的相应代码(uc_client\control\user.php文件下的onedit()函数)
同步通知:
若要让phpcms同步更新密码,只需以下两步:
1、修改uc_server/model/base.php
1.1、添加一个函数
2、修改uc_client/model/base.php
2.1、添加一个函数
两个base.php文件中添加的函数名可以是其他的,但两边必须是一样的名称。
这样在登录账号和退出账号的时候都会进行一次同步通知,虽然通知有点频繁,但是却能够达到效果。
discuz:
Discuz! 程序版本 | Discuz! X3 Release 20130801 |
UCenter 客户端版本 | UCenter 1.6.0 Release 20110501 |
服务器系统及 PHP | Linux / PHP v5.3.27 |
服务器软件 | nginx/1.1.16 |
服务器 MySQL 版本 | 5.5.34-log |
PHPCMS程序版本:Phpcms V9.5.7 Release 20140625
操作系统:Linux
服务器软件:nginx/1.1.16PHP/5.3.27
MySQL 版本:5.5.34-log
问题:
通过ucenter整合disucz和phpcms,在discuz上修改用户密码,无法通知到phpcms,在ucenter后台的数据列表中查看通知列表,发现通知失败,尝试点击Discuz! Board列下的通知失败链接,返回通知成功,而点击phpcms_v9下的通知失败链接,仍返回通知失败。
原因:
经过逐步调试,发现uc_server/model/note.php文件中的sendone函数下的$response 返回值为空,因此判断问题有可能出现在dfopen2函数上
$response = trim($_ENV['misc']->dfopen2($url, 0, $note['postdata'], '', 1, $app['ip'], UC_NOTE_TIMEOUT, TRUE));
解决办法:
修改uc_server/model/misc.php文件中的dfopen函数(dfopen2函数调用dfopen函数)
找到代码
@fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
把上面这段代码所属的if判断全部替换为下面这一段
if(function_exists('fsockopen')) {
$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);} elseif (function_exists('pfsockopen')) {
$fp = @pfsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
} elseif(function_exists('stream_socket_client')) {
//$fp = @stream_socket_client($ip.':'.$port, $errno, $errstr, $timeout);
$fp = @stream_socket_client("tcp://".$host.":80", $errno, $errstr, $timeout);
} else {
$fp = false;
}
为什么要注释掉
$fp = @stream_socket_client($ip.':'.$port, $errno, $errstr, $timeout);而要改用
$fp = @stream_socket_client("tcp://".$host.":80", $errno, $errstr, $timeout);就是因为在点击phpcms_v9下的通知失败链接时,此处无法获取到ip地址,因此改为使用主机名
fsockopen函数和pfsockopen函数因存在安全问题,已被服务器禁用,所以现在一般是用stream_socket_client函数进行代替(可以查看文章PHPCMS无法登录、注册)
另外:
如果在discuz修改密码时,发现通知的密码为空,则修改ucenter客户端(uc_client)的相应代码(uc_client\control\user.php文件下的onedit()函数)
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');修改为
$_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password='.$newpw);
同步通知:
若要让phpcms同步更新密码,只需以下两步:
1、修改uc_server/model/base.php
1.1、添加一个函数
function init_note2() { $this->load('note'); $_ENV['note']->send(); }1.2、在base()函数中添加
$this->init_note2();
2、修改uc_client/model/base.php
2.1、添加一个函数
function init_note2() { $this->load('note'); $_ENV['note']->send(); }
两个base.php文件中添加的函数名可以是其他的,但两边必须是一样的名称。
这样在登录账号和退出账号的时候都会进行一次同步通知,虽然通知有点频繁,但是却能够达到效果。
相关文章推荐
- 通过ucenter整合discuz和phpcms,在discuz修改用户密码,ucenter通知失败,phpcms无法同步更新密码
- 网站与discuz的论坛进行整合,实现用户同步注册,单点登陆,同步删除用户,同步修改用户密码
- 网站与discuz的论坛进行整合,实现用户同步注册,单点登陆,同步删除用户,同步修改用户密码
- Discuz .net整合3.0Beta的注册、注销、登录、删除用户、修改密码等
- discuz,ucenter,uchome修改密码 phpcms不能登陆的问题修正
- 修改sys密码导致节点关闭失败及standby db无法同步-处理过程
- destoon,ucenter整合 用户登录的处理,修改密码后的处理
- phpcms用户退出却无法通知到ucenter的 BUG
- phpcms 退出无法同步通知discuz问题的解决方法
- flex 代码修改 无法通过tomcat更新显示的问题
- 忘记 Ubuntu 10.10 登录密码时,通过 recovery mode 修改用户密码[转]
- 无法通过用windows方式修改sa的密码,总是提示锁定
- 关于应用UCenter同步修改密码问题?
- 关于UCenter 1.5.2 版以下的一个修改用户密码bug
- 通过winfrom界面 修改Mysql的用户(root)的密码
- 通过suse linux单用户模式修改root密码方法
- 深度剖析修改AD用户密码的数据同步机制 推荐
- 如何通过suse linux的单用户模式修改root密码
- linux单用户下无法修改密码