让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文件,即可实现自动激活。

如果对性能有更高的要求,可以优化一下获取激活用户那一部分的代码,就先写到这了。

评论:

  1. godaddy续费优惠码 回复 2014年09月29日 22时20分
    磨者
    很不错的博客,看了博主几篇文章,都受益匪浅,支持

  2. 好游网络 - 王 回复 2015年01月30日 14时58分
    <!DOCTYPE html>
<!--[if lt IE 7 ]><html class= 404 — 磨延城的博客 - 专注技术研究,分享生活体验

    步途坎坷,磨者独行,悠悠长歌觅知音.

    404: 好像迷路了...

    很抱歉,您要访问的页面迷路了,找不到了。您可以使用下边的搜索框进行搜索,也可以浏览你感兴趣的热门标签。