ThinkSNS注册用户名和邮箱与UC通讯修复

今天在研究TS的时候,发现他和UC之间的通讯存在各种问题。完成和UC配置之后,一切正常的情况下,会有以下问题:

  1. 注册的时候可以使用已经存在UC表中的用户名和密码
  2. 修改用户名无法和UC表单同步(新增一条记录)
  3. 修改密码无法和UC同步
  4. 修改头像无法和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">&nbsp;</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>

更新缓存

密码更新也删除,同上。

邮件订阅,随时获取更新信息

3条回应:“ThinkSNS注册用户名和邮箱与UC通讯修复”

  1. Alien说道:

    好用

  2. 冬天热说道:

    多谢博主

  3. 22说道:

    works!

发表评论

电子邮件地址不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.