ThinkPHP与Discuz通过Ucenter同步登录过程记录

1. 下载discuz源码并,以及附件中的api.zip,ThinkphpUcenter.zip文件,将源码与ThinkPHP框架部署如下:


 按照上图部署完项目目录后进入下一步,关于config.inc.php文件在此先不用关心,在安装完成discuz并在ucenter中添加了应用之后便可得到此文件中的代码。

2.安装discuz论坛 http://yourhost/discuz/install 

3.安装完成后进入管理中心若提示:Please delete install/index.php via FTP! 需将/discuz/install/install.php 删除或改名称

之后进入Ucenter点击应用管理添加应用。应用配置如下图

填写完成后提交,会在提交按钮下方出现配置代码:

将些部分代码复制到config.inc.php文件中保存,至此在Ucenter应用管理列表中的该应用通讯状态应为通讯成功

4. 回到项目目录,在ThinkPHP应用的配置文件config.php中添加数组元素“'AUTH_KEY' => 'xxxxx”;值在Discuz配置文件目录config下的config_global.php文件中的$_config['security']['authkey']的值。

5. 修改Ucenter与ThinkPHP冲突的类名

(1)/uc_client/model/base.php 将类名改为uc_base (只需更改类名不需更改文件名)

(2)将/uc_client/control/下的所有继承base类的文件改为继承uc_base

(3)检查/uc_client/lib/db.class.php 类名是否为 ucclient_db,若为db则需更改为ucclient_db

6. 配置双向登录

创建BaseController.class.php 文件,使所有Controller都继承自BaseController,BaseController.class.php代码如下

    protected function _initialize()
    {
        if (checkLogin()) {
            $this->autologin();
        }
    }

    public function autologin()
    {
        if (isset($_COOKIE['8asp_2132_auth']) && !empty($_COOKIE['8asp_2132_auth'])) {
            Vendor('ThinkphpUcenter.UcApi');//载入UcApi扩展
            $key = md5(C('AUTH_KEY') . $_COOKIE['8asp_2132_saltkey']);//获取在本应用的配置文件config.php中的解密钥匙
            $userMsg = explode("\t", uc_authcode($_COOKIE['8asp_2132_auth'], 'DECODE', $key)); //得到加了密的password【$userMsg[0]】和uid【$userMsg[1]】
            $userInfo = uc_get_user($userMsg[1], 1);//通过uid获取username
            $_SESSION['user_id'] = $userMsg[1];
            $_SESSION['username'] = $userInfo[1];
            $_SESSION['email'] = $userInfo[2];
            $member = D('member')->where('user_name ="' . $userInfo[1] . '"')->find();
            session('member', $member);
        } else {
            //do something
        }
    }
其中$_COOKIE['8asp_2132_auth']中的8asp可通过dump($_COOKIE);来获取将此代码段中的四处$_COOKIE['XXXX_2132_XXXX']替换为dump出的前缀。完成后在项目登录方法中登录验证成功后添加如下代码

                    vendor('ThinkphpUcenter.UcApi');
                    $login = UcApi::login($member['user_name'],$pass);
                    if (!$login){
                        $this->error('同步登录失败','/Index/index');
                    }
                    echo $login['synlogin'];//这一步一定添加,此处输出的为同步登录的js代码,若使用ajax传值此处应别做处理
退出登录时在退出成功后调用以下代码

        vendor('ThinkphpUcenter.UcApi');
        echo UcApi::logout();//输出同步登出的代码 与登录时类似
7.项目注册后论坛同步用户信息

在项目网站注册时需同时向以下数据表插入用户数据 

common_member、common_member_status、common_member_profile、common_member_field_forum、common_member_field_home、common_member_account等以保证用户被激活,注意哪些字段不能为空。

8.论坛注册后同步到用户信息

与第7条类似,在discuz注册方法中将用户信息添加到项目网站相关数据表即可(对discuz了解较少,未实现)

附件一:api.zip 链接: http://pan.baidu.com/s/1slF2GjV 密码: dz6e

附件二:ThinkPHPUcenter.zip链接: http://pan.baidu.com/s/1nvCnhmL 密码: in63

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Eric__Cui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值