让Discuz论坛自动激活UCenter用户中心的用户
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/119/ ]
如果UCenter用户中心的用户没有在Discuz论坛中激活,就意味着论坛不存在这个用户.所以当论坛用户试图访问这位老朋友的空间的时候,就会吃闭门羹:您访问的用户不存在.即便是给网站新增了有可玩性的Discuz互动社区,但这样的论坛激活机制很不好,导致很多没在论坛中激活的用户如同消失了.
如果UCenter用户中心的用户没有在Discuz论坛中激活,就意味着论坛不存在这个用户。所以当论坛用户试图访问这位老朋友的空间的时候,就会吃闭门羹:您访问的用户不存在。即便是给网站新增了有可玩性的Discuz互动社区,但这样的论坛激活机制很不好,导致很多没在论坛中激活的用户如同消失了。
对于有大量用户的网站而言,当务之急就是让Discuz实现自动激活。今天研究了一下Discuz的激活机制,发现了其中的奥妙,接下来就给大家分享,如果实现自动激活Discuz论坛用户这个功能。思路如下:
1)获取UCenter用户中心的所有用户:$UcUser
2)获取Discuz论坛的所有用户(已激活用户):$DzUser
3)从$UcUser中排除掉$DzUser中的用户,得到代激活的用户:$UcUser
4)遍历$UcUser,依次执行激活操作
下边给出PHP代码的具体实现过程,直接在discuz根目录新建activation.php,代码如下:
<?php
define('APPTYPEID', 0);
define('CURSCRIPT', 'member');
require './source/class/class_core.php';
require './config/config_ucenter.php';
$discuz = C::app();
define('CURMODULE', $mod);
$discuz->init();
require libfile('function/member');
require libfile('class/member');
$UcUser = array();
//获取UC用户中心的用户
$pquery = DB::query('select uid,username,email from ucenter.uc_members');
while($pquery && $post = DB::fetch($pquery)) {
$UcUser[$post['uid']] = $post;
}
//获取Discuz中已激活的用户
$pquery = DB::query('select uid from discuz.pre_common_member');
while($pquery && $post = DB::fetch($pquery)) {
//循环排除已激活的用户
unset($UcUser[ $post['uid'] ]);
}
$init_arr = array(0,0,0,0,0,0,0,0,0);//用户相关杂项
$groupid = 10;//用户组ID
foreach($UcUser as $uid => $row) {
//执行Discuz自带的激活操作
C::t('common_member')->insert($uid, $row['username'], md5(random(10)), $row['email'], $_G['clientip'], $groupid, $init_arr);
}保存完毕,直接通过浏览器访问PHP文件,即可实现自动激活。
如果对性能有更高的要求,可以优化一下获取激活用户那一部分的代码,就先写到这了。

我来说两句: