今天在研究TS的时候,发现他和UC之间的通讯存在各种问题。完成和UC配置之后,一切正常的情况下,会有以下问题:
- 注册的时候可以使用已经存在UC表中的用户名和密码
- 修改用户名无法和UC表单同步(新增一条记录)
- 修改密码无法和UC同步
- 修改头像无法和UC同步
自己研究了下,修改方法如下:
注册问题:
在/addons/model/RegisterModel.class.php中找到以下代码
if (filter_keyword($name) !== $name) { $this->_error = '抱歉,该昵称包含敏感词不允许被使用'; return false; }
在下方增加以下代码:
//uc //载入UC客户端SDK include_once SITE_PATH.'/api/uc_client/client.php'; if(!(uc_user_checkname($name)==1)){ $this->_error = '当前用户名已经存在'; return false; }
找到:
public function isValidEmail($email, $oldEmail = null) {
在下方增加以下代码:
找到:
} elseif (!$this->_user_model->isChangeEmail($email, $this->_user_model->where('`email` LIKE "'.$oldEmail.'"')->field('uid')->getField('uid'))) { $this->_error = '该Email已被注册'; return false; }
在下方增加以下代码:
else if(uc_user_checkemail($email)==1){ $this->_error = '该Email已被注册'; return false; }
这样修改用户名的时候,UC的问题也解决了。但是完成修改后,同步UC并没有,可以暂时关闭用户修改用户名,做如下修改:
注意:以下是临时解决方法,并没有从根本解决,之后有时间我再去研究吧。
在/apps/public/Tpl/default/Account/index.html中,
找到:
<input event-node="uname" event-args="old_name={$user_info['uname']}" name="uname" checkurl="{:U('public/Register/isUnameAvailable')}" autocomplete="off" type="text" value="{$user_info['uname']}" />
改为:
<input event-node="uname" event-args="old_name={$user_info['uname']}" name="uname" checkurl="{:U('public/Register/isUnameAvailable')}" autocomplete="off" type="text" value="{$user_info['uname']}" disabled/>
后台更新缓存
在/apps/public/Lib/Action/AccountAction.class.php中
找到:
$uname = t($_POST ['uname']); $oldName = t($_POST ['old_name']); $save ['uname'] = filter_keyword($uname); $res = model('Register')->isValidName($uname, $oldName); if (!$res) { $error = model('Register')->getLastError(); return $this->ajaxReturn(null, model('Register')->getLastError(), $res); }
改为:
//$uname = t($_POST ['uname']); $oldName = t($_POST ['old_name']); $uname = $oldName; $save ['uname'] = filter_keyword($uname); //$res = model('Register')->isValidName($uname, $oldName); //if (!$res) { //$error = model('Register')->getLastError(); //return $this->ajaxReturn(null, model('Register')->getLastError(), $res); //}
另外邮箱修改也需要禁止:
在/apps/public/Tpl/default/Account/security.html中,
删除:
<a href="javascript:;" onclick="binding('email', this);" class="right">重置</a><span id="binding_email_name">
和
<div id="binding_email" class="set-item-info clearfix border-b" style="display:none;"> <div class="sec-left"> <form id="do_binding_email" action="{:U('public/Account/doBindingEmail')}" method="post"> <dl class="form-set form-contact"> <dd> <div class="form-tt">请输入新的邮箱:</div> <div class="form-row"> <input name="email" id="write_email" type="text" class="text" autocomplete='off'/> </div> </dd> <dd> <div class="form-tt">验证码:</div> <div class="form-row"> <input id="write_email_code" name="email_code" type="text" class="text" autocomplete='off' /> <a href="javascript:;" id="get_email_code" onclick="send_email_msg();" email="" class="btn-cancel"> <span>获取验证码</span> </a> <div class="txt-info" id="email_msg_tip" style="display:none;">验证码已发送到您的邮箱,30分钟内输入有效,请勿泄露。</div> </div> </dd> <dd> <div class="form-tt"> </div> <div class="form-row"> <a href="javascript:;" onclick="do_binding_email();" class="btn-green-small"> <span>保存</span> </a> </div> </dd> </dl> </form> </div> <div class="sec-right"> <ul> <li>1、输入要绑定的邮箱</li> <li>2、请输入验证码,需要从绑定的邮箱邮件中获取验证码</li> <li>3、邮箱绑定完成</li> </ul> </div> </div>
更新缓存
密码更新也删除,同上。
好用
多谢博主
works!