网站整合ucenter可以同步登录、退出,但第1次在discuz注册时,并不会同步到网站,需要退出再登录。下面是改进这一问题的思路,供大家参考。

一,先进论坛后台,站长,ucenter设置,选择允许直接激活
二,进ucenter ,应用管理,新建立应用.类型选其它,名称填book,主url填你的网站主页网址.比如https://yuncx.cn
通信密钥随便填一个密码,最下面同步登录填是.其它不用填,保存.

三,修改要整合的第三方应用网站的数据库配置.方便从第三方网站上,同步插入会员数据到ucenter中.
有些可能需要在后台配置,或直接修改文件,要具体分析.
这个文件里面的内容.其实就是ucenter后台,book应用,编辑后,拉到最下面,看到配置信息,把他全部复制后,填在uc.php中的对应位置,保存,上传,替换原文件即可。

四,去论坛的安装目录中,找

uc_client/data/cache/apps.php

打开,里面有你uc后台的所有应用,如果没有.说明不正常.把里面所有内容.复制,填到book网站对应的

uc_clientdatacacheapps.php

中,保存上传
这两个文件要一致,才能同步.

五,实现论坛上注册会员后,直接在所有应用中自动登录,而不必登录,再登录一次才同步.
方法
修改论坛目录中对应的,

uc_clientmodeluser.php

中的function add_user 函数

把大约131行的

$salt = substr(uniqid(rand()), -6);

整体替换为

$salt = substr(uniqid(rand()), -6);
$password2 = md5($password);

然后,在

return $uid; 

的上面增加下面这段代码

$time2=date('Y-m-d H:i:s',$this->base->time);
$this->db->query("INSERT INTO admin_book.hbdx_users  SET uc_id='$uid',user_mail='$email',user_name='$username',user_group='同步注册会员',user_displayname='$username',registerdate='$time2',user_pass='$password2',user_integration='10'");

/////注意,其中,admin_book 表示book网站对应的数据库名,hbdx_users 表示表名,可以相应修改为正在使用的.

六,同时,修改论坛目录中的.

sourceclassclass_member.php

找到大约926行的

   $extra = array(
        'showid' => 'succeedmessage',
        'extrajs' => '<script type="text/javascript">'.
        'setTimeout("window.location.href =\''.$href.'\';", 3000);'.
        '$(\'succeedmessage_href\').href = \''.$href.'\';'.
        '$(\'main_message\').style.display = \'none\';'.
        '$(\'main_succeed\').style.display = \'\';'.
        '$(\'succeedlocation\').innerHTML = \''.lang('message', $locationmessage).'\';'.
        '</script>',
        'striptags' => false,
    );

整体替换为

$ucsynlogin = '';
if($_G['setting']['allowsynlogin']) {
        loaducenter();
        $ucsynlogin = uc_user_synlogin($_G['uid']);
}
$extra = array(
    'showid' => 'succeedmessage',
    'extrajs' => '<script type="text/javascript">'.
    'setTimeout("window.location.href =\''.$href.'\';", '.$refreshtime.');'.
    '$(\'succeedmessage_href\').href = \''.$href.'\';'.
    '$(\'main_message\').style.display = \'none\';'.
    '$(\'main_succeed\').style.display = \'\';'.
    '$(\'succeedlocation\').innerHTML = \''.lang('message', $locationmessage).'\';'.
    '</script>'.$ucsynlogin,
    'striptags' => false,
);

//其实主要是在后面增加了这一句
//.$ucsynlogin ,从而实现论坛上初次注册的会员,就可以直接同步到另一站,不需要退出再登录一次.

七,如果论坛中已经存在以前注册的用户,如果他论坛上登录后,想同步注册到本站,则还需要在论坛目录中,增加个email参数.这样,本应用的api/uc.php中就能得到这个参数.
具体为

uc_servercontroluser.php

,要修改本文件的onsynlogin()

下面这个函数直接替换原来的就行.里面增加了email

function onsynlogin() {
    $this->init_input();
    $uid = $this->input('uid');
    if($this->app['synlogin']) {
        if($this->user = $_ENV['user']->get_user_by_uid($uid)) {
            $synstr = '';
            foreach($this->cache['apps'] as $appid => $app) {
                if($app['synlogin']) {
                    if($app['appid'] != $this->app['appid']) {
                        $synstr .= '<script type="text/javascript" src="'.$app['url'].'/api/'.$app['apifilename'].'?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this->user['uid'].'&email='.$this->user['email'] .'&password='.$this->user['password']."&time=".$this->time,'ENCODE', $app['authkey'])).'" reload="1"></script>';
                    }
                    if(is_array($app['extra']['extraurl'])) foreach($app['extra']['extraurl'] as $extraurl) {
                        $synstr .= '<script type="text/javascript" src="'.$extraurl.'/api/'.$app['apifilename'].'?time='.$this->time.'&code='.urlencode($this->authcode('action=synlogin&username='.$this->user['username'].'&uid='.$this->user['uid'].'&email='.$this->user['email'].'&password='.$this->user['password']."&time=".$this->time,'ENCODE', $app['authkey'])).'" reload="1"></script>';
                    }
                }
            }
            return $synstr;
        }
    }
    return '';
}

//函数结束

标签: discuz, ucenter

添加新评论