Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

有关UCenter修改用户名无效的问题

[复制链接]
vinsonwang 发表于 2011-10-31 09:37:06 | 显示全部楼层 |阅读模式
本帖最后由 vinsonwang 于 2011-11-1 08:57 编辑

*************************************************
** 本教程基于版本:Discuz! X 2.0                                         **
*************************************************      
有些站长在UCenter修改用户名后,Discuz! 并没有显示出来效果,造成无效的原因主要是通信问题,如果你的站点显示通信成功且配置文件和UCenter应用管理当中的一致,则在UCenter修改用户信息后,会自动通知Discuz!修改相关用户信息的,如果修改之前,通信失败,修复通信后,可以到UCenter的通知列表里,点击发送通知,一样会修改Discuz! 的用户信息的。在UCenter里执行修改用户信息时,调用onedit函数

  1. function onedit() {
  2.           $uid = getgpc('uid');
  3.           $status = 0;
  4.           if(!$this->user['isfounder']) {    //判断是否受保护用户
  5.                    $isprotected = $this->db->result_first("SELECT COUNT(*) FROM ".UC_DBTABLEPRE."protectedmembers WHERE uid = '$uid'");
  6.                    if($isprotected) {
  7.                              $this->message('user_edit_noperm');
  8.                    }
  9.           }

  10.           if($this->submitcheck()) {    //判断是否提交更新
  11.                    $username = getgpc('username', 'P');
  12.                    $newusername = getgpc('newusername', 'P');
  13.                    $password = getgpc('password', 'P');
  14.                    $email = getgpc('email', 'P');
  15.                    $delavatar = getgpc('delavatar', 'P');
  16.                    $rmrecques = getgpc('rmrecques', 'P');
  17.                    $sqladd = '';
  18.                    if($username != $newusername) {    //是否更新用户名
  19.                              if($_ENV['user']->get_user_by_username($newusername)) {
  20.                                       $this->message('admin_user_exists');
  21.                              }
  22.                              $sqladd .= "username='$newusername', ";
  23.                              $this->load('note');
  24.                              $_ENV['note']->add('renameuser', 'uid='.$uid.'&oldusername='.urlencode($username).'&newusername='.urlencode($newusername));//保存记录
  25.                    }
  26.                    if($password) {    //密码是否更新
  27.                              $salt = substr(uniqid(rand()), 0, 6);
  28.                              $orgpassword = $password;
  29.                              $password = md5(md5($password).$salt);
  30.                              $sqladd .= "password='$password', salt='$salt', ";
  31.                              $this->load('note');
  32.                              $_ENV['note']->add('updatepw', 'username='.urlencode($username).'&password=');//保存记录
  33.                    }
  34.                    if($rmrecques) {   //验证问答
  35.                              $sqladd .= "secques='', ";
  36.                    }
  37.                    if(!empty($delavatar)) {    //删除头像
  38.                              $_ENV['user']->delete_useravatar($uid);
  39.                    }

  40.                    $this->db->query("UPDATE ".UC_DBTABLEPRE."members SET $sqladd email='$email' WHERE uid='$uid'");
  41.                    $status = $this->db->errno() ? -1 : 1;
  42.           }               
  43.           $user = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");
  44.           $user['bigavatar'] = '<img src="avatar.php?uid='.$uid.'&size=big">';
  45.           $user['bigavatarreal'] = '<img src="avatar.php?uid='.$uid.'&size=big&type=real">';
  46.           $this->view->assign('uid', $uid);
  47.           $this->view->assign('user', $user);
  48.           $this->view->assign('status', $status);
  49.           $this->view->display('admin_user');
  50. }
复制代码


这个函数首先判断是该用户受保护,然后就是判断是否提交了修改,当提交后,判断用户名是否修改,密码是否做了修改,验证问题及头像等是否修改,如果做了修改,调用add()方法在notelist表保存更新内容,当修改成功后,二次调用send方法时,会自动向各个UCenter应用发出执行命令,更新对应用户的信息,并保存通知,如果不成功,提示通知失败,并指向链接,手动通知。

64243354 发表于 2011-10-31 16:28:17 | 显示全部楼层
哈哈~
回复

使用道具 举报

shaoshuai168 发表于 2011-11-1 00:39:37 | 显示全部楼层
按此方法检查完毕 修改后可以使用新用户名登陆了 可是以前发的帖子里 用户那块还是显示原来的名字
回复

使用道具 举报

ccy6868 发表于 2011-11-3 00:58:20 | 显示全部楼层
shaoshuai168 发表于 2011-11-1 00:39
按此方法检查完毕 修改后可以使用新用户名登陆了 可是以前发的帖子里 用户那块还是显示原来的名字

我目前就是遇到這個問題
請問如何解決呢
回复

使用道具 举报

 楼主| vinsonwang 发表于 2011-11-3 09:20:32 | 显示全部楼层
ccy6868 发表于 2011-11-3 00:58
我目前就是遇到這個問題
請問如何解決呢

确保你的config_ucenter.php文件内容和UCenter应用管理里面的内容保持一致,然后手动到通知列表里执行一下。
回复

使用道具 举报

popuppp 发表于 2011-11-3 23:50:05 | 显示全部楼层
  辛苦了,这个很有用。
回复

使用道具 举报

idong 发表于 2011-11-23 11:53:23 | 显示全部楼层
{:soso_e113:}给力
回复

使用道具 举报

love1806 发表于 2011-11-23 15:39:13 | 显示全部楼层
请问这个是在什么地方修改的?
回复

使用道具 举报

liuxjno1 发表于 2011-11-23 16:20:39 | 显示全部楼层
回复

使用道具 举报

yanhailou 发表于 2011-11-24 19:53:43 | 显示全部楼层
看上去比较复杂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-4-27 14:29 , Processed in 0.120430 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表