ucenter discuz tp 同步登录 同步退出 同步修改用户信息~~


参考网站:

http://blog.163.com/zhaozunjie@126/blog/#m=0  ---这个163的博客,很多ucenter的文章~~~很多php的知识~~~~

http://www.thinkphp.cn/code/1843.html

http://blog.csdn.net/u011771214/article/details/41781643---------ucenter的安装。里面tp中除了uc的放置位置,都是直接用的;URL只要找到api的上面,里面的uc.php文件名不好更改

http://m.shanmao.me/index.php?s=/Index/acticle/tid/1755-----tp中操作都参考这个,discuz的方向操作不好参考,都直接复制的~~~
https://www.liudon.org/737.html
http://blog.sina.com.cn/s/blog_81827fc70100xaid.html----参考手册
http://blog.163.com/zhaozunjie@126/blog/static/1398240612010101855623646/----提到的几点都落实了,ucenter新添加应用的 配置注意问题;

http://blog.csdn.net/lwx2615/article/details/6817071----tp通信老失败,参考这文章才通信成功的,可以在本地新建一个小项目,

内容不多,调试成功了,可以逐步更改里面的配置,查看哪些和通信成功失败有关的,小项目不用是tp的;test项目小,没那么复杂,更改配置也比较容易;

ucenter手册:
http://m.shanmao.me/index.php?s=/Index/acticle/tid/1755
uc开发接口手册:
https://www.phpddt.com/manual/ucenter/html/user.htm##    ------ ucenter自己网站的手册都不好下载看的,这里我见过最规范的uc文档~~~

 

参考博客和手册;

1.安装ucenter ,再安装discuz

  在ucenter里添加应用~~~~安装配置就不写了,上面博客都有;

  discuz安装时,注意配置ucenter的url接口。

   discuz中应用,ucenter设置的时候,注意url,---我写成127.。。。的格式的,用域名好像不行~~~(这里测试了很久)

  

  这样用域名访问discuz后台,上面栏目ucenter的点击,左边边框还出不来,

  用ip方法discuz后台才可以;

  也可以直接访问登录ucenter,左边就出来了,不过也左边不用也行,下面配置都用不到~~~

1.配置,确保通信成功~~~

  1.discuz通信:

    尤其注意:应用的主 URL:

   链接到项目里的api前,会自动找uc.php

  注意:通信密钥要和项目中config_ucenter.php中密钥一致!!!!  

define('UC_KEY', 'a845N/eivvBpreT2sfhih7x5q19gvkj4VRNf5T4');//~~~要和项目中一样;
  有时候项目更改了,该文件不会自动更改;----把原来添加的应用删除再添加,就出现这样的问题,UC_KEY不会自动更新;

 2.配置tp项目:使得tp的通信成功

在ucenter中添加应用:url写到。。。。/uc  (不要斜杆),会自定找api和下面的uc.php.

uc.php从ucenter文件中赋值过来,有$get['action'] $get['time']  自己配置,如果没抓取到的时候,设置为test  time(),

确保uc.php引用文件路径都找到---uc.php如果执行有错误的话,通信会失败;

client为ucenter复制过来的;

config.ini.php为ucenter添加应用时候,最下面生成的配置;----后续这里会添加tp项目的配置数据库,和cookie配置----这个里面数据库登录用户,密码等配置错误,----通信会失败(具体操作哪个数据库写错倒不会通信失败)

<?php
define('UC_CONNECT', 'mysql');
define('UC_DBHOST', 'localhost');
define('UC_DBUSER', 'root');
define('UC_DBPW', '123456');
define('UC_DBNAME', '******');
define('UC_DBCHARSET', 'utf8');
define('UC_DBTABLEPRE', '`******`.uc_');
define('UC_DBCONNECT', '0');
define('UC_KEY', 'r1QbKaB099Z41b04Q968A715v9P092Pem5Tccah13bwfk021g2l2r740c152CdU5');
define('UC_API', 'http://127.0.0.1/b******/****');
define('UC_CHARSET', 'utf-8');
define('UC_IP', '');
define('UC_APPID', '8');
define('UC_PPP', '20');

/*discuz表格 前缀 photos登录discuz从ucenter用户表中抓取插入用户信息~~*/
define('DISCUZ_DANAME','*****');
define('DISCUZ_DBRRE','pre_');

//同步登录 Cookie 设置
$cookiedomain = 'local.****.****.net';                     // cookie 作用域, 这里前面不能加http://,否则区域无效~~~,这个是uc.php接受链接来设置自己项目用的;这里填写所在羡慕的域名~~
$cookiepath = '/';                                              // cookie 作用路径

$dbhost = 'localhost';          // 数据库服务器
$dbuser = 'root';               // 数据库用户名
$dbpw = '****';               // 数据库密码
$dbname = '****';             // 数据库名
$pconnect = 0;                  // 数据库持久连接 0=关闭, 1=打开
$tablepre = 'tf_';              // 表名前缀, 同一数据库安装多个论坛请修改此处
$dbcharset = 'utf8';            // MySQL 字符集, 可选 'gbk', 'big5', 'utf8', 'latin1', 留空为按照论坛字符集设定

include 中有一个mysql的类文件,ucenter中赋值过来的;

url写到discuz,会自动去找api下的uc.php文件的;

config/config_ucenter.php文件中赋值,添加应用时,配置信息;

(client文件夹,可以从ucenter文件夹里复制过来``)

   

2.tp登录,确保discuz也登录~~同步登录,同步修改用户信息

 tp这注册:确保ucenter也有数据查入,如果通信成功,配置好的话是这样的:

                //ucenter注册操作;~~~需要事务吗
                $uc_uid = uc_user_register($username, $password);//~~这里email不填写~~~后台屏蔽了验证;
                if($uc_uid <= 0) {
                    if ($uc_uid == -1) {
                        $json->setErr('0','已注册成功,用户同步到平台出错,用户名不合法');
                        $json->Send();
                    } elseif ($uc_uid == -2) {
                        $json->setErr('0','已注册成功,用户同步到平台出错,包含要允许注册的词语');
                        $json->Send();
                    } elseif ($uc_uid == -3) {
                        $json->setErr('0','已注册成功,用户同步到平台出错,用户名已经存在于平台上');
                        $json->Send();
                    } elseif ($uc_uid == -4) {
                        $json->setErr('0','已注册成功,用户同步到平台出错,Email 格式有误');
                        $json->Send();
                    } elseif ($uc_uid == -5) {
                        $json->setErr('0','已注册成功,用户同步到平台出错,Email 不允许注册');
                        $json->Send();
                    } elseif ($uc_uid == -6) {
                        $json->setErr('0','已注册成功,用户同步到平台出错,Email 已经被注册');
                        $json->Send();
                    } else {
                        $json->setErr('0','已注册成功,用户同步到平台出错,未定义');
                        $json->Send();
                    }
                }

默认注册只会玩uc数据库中插入数据,但这样,discuz中第一次登录要激活,discuz用户表中才会有数据,才可以登录;---我们把配置改了,确保注册,discuz表中的数据就上去~~
uc_client/module/user.php

参考博客:http://blog.csdn.net/iastro/article/details/52587643

    function add_user($username, $password, $email, $uid = 0, $questionid = '', $answer = '', $regip = '') {
        $regip = empty($regip) ? $this->base->onlineip : $regip;
        $salt = substr(uniqid(rand()), -6);
        $password = md5(md5($password).$salt);
        $sqladd = $uid ? "uid='".intval($uid)."'," : '';
        $sqladd .= $questionid > 0 ? " secques='".$this->quescrypt($questionid, $answer)."'," : " secques='',";
        $this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='$regip', regdate='".$this->base->time."', salt='$salt'");
        $uid = $this->db->insert_id();
        $this->db->query("INSERT INTO ".UC_DBTABLEPRE."memberfields SET uid='$uid'");

        //added begin~~~discuz 数据表格拦截激活,先插入数据;~~~注意:这里如果ucenter已经加入了数据,discuz不会放入数据;(调试开发中会有这样漏洞)
        $discuz_dbname = DISCUZ_DANAME;
        $discuz_table_pre = DISCUZ_DBRRE;
        $table_info = $discuz_dbname.'.'.$discuz_table_pre;


        $this->db->query("INSERT INTO ".$table_info."common_member SET uid='$uid', username='$username', password='$password', email='$email', adminid='0', groupid='10', regdate='".$this->base->time."', credits='0', timeoffset='9999'");
        $this->db->query("INSERT INTO ".$table_info."common_member_status SET uid='$uid', regip='$regip', lastip='$regip', lastvisit='".$this->base->time."', lastactivity='".$this->base->time."', lastpost='0', lastsendmail='0'");
        $this->db->query("INSERT INTO ".$table_info."common_member_profile SET uid='$uid'");
        $this->db->query("INSERT INTO ".$table_info."common_member_field_forum SET uid='$uid'");
        $this->db->query("INSERT INTO ".$table_info."common_member_field_home SET uid='$uid'");
        $this->db->query("INSERT INTO ".$table_info."common_member_count SET uid='$uid', extcredits1='0', extcredits2='0', extcredits3='0', extcredits4='0', extcredits5='0', extcredits6='0', extcredits7='0', extcredits8='0'");


        //added end
        return $uid;
    }

 

注意user_add 的这个写法,ucenter里面如果已经有数据,就不管discuz中是否有数据,都不会再往里面放数据了~~调试的时候注意;
note:phpmyadmin,左侧边栏,展示数据表名是有限的,不一定会把所有的表格都展示出来,一开始,我看博客上有的表格是多余的,就没有添加~~~~点击dbname才会看到所有的表格,discuz的表格还是多的,都展开,浏览器不下拉都展示不了~~~~大概3 4页才都出来!!
这里用到2个常量,都是在config中定义的,discuz的表格名称和前缀~~~注意配置好了~~~
        //2.ucenter实现登录~~~ //通过接口判断登录帐号的正确性,返回值为数组 list($uc_login_uid,$uc_login_username,$uc_login_password,$uc_login_email) = uc_user_login(trim($_POST['username']), trim($_POST['password'])); if ($uc_login_uid > 0){ //生成同步登录的代码 js代码。后面输出。 $ucsynlogin = uc_user_synlogin($uc_login_uid); $json->setAttr('ucsynlogin',$ucsynlogin); }elseif($uc_login_uid == '-1'){ $json->setErr('0','已登录成功,用户同步登录到平台用户不存在'); $json->Send(); }elseif($uc_login_uid == '-2'){ $json->setErr('0','已登录成功,用户同步登录到平台密码错误'); $json->Send(); }else{ $json->setErr('0','已登录成功,用户同步登录平台错误未知'); $json->Send(); }
$ucsynlogin----输出结果:

<script type="text/javascript" src="http://*******/discuz/api/uc.php?time=1503386589&code=c204c7bZe5hxoHmlwYe1yZKG8K7%2BbQ6VfvKT%2BPYYefGurOrZC9kQ1Oqqmibu%2BVcnnYcAK33phDTiTNYpxmegxjufcJqUiITmdm8nIMdPLJxpr8%2FEKABCg0PFmB9eW8f%2BKGL34e%2B8ptlG%2Bu%2BgJOOwupKl9b0%2BbNA1XJ0uxSfoyPhiZw" reload="1"></script>


<script type="text/javascript" src="http://local.photos.net/uc/api/uc.php?time=1503386589&code=66d11oXbvKbQptWZHTxzl8Y2lm64U1addkNVaiiMtUFMddxDfYq2Qax4NEenOBsRTxkstHkm86T5zTDyoMJwEEQw%2Fm6UsLTPvRgGpycynPowSA9ABBSnM5Ir7iaxJhUnW1K0styUM2gSLOimsPyy7ZqS000dvlx%2BpgxjY8b%2FqNpMjw" reload="1"></script>

确保里面链接,复制到浏览器可以正常实现~~~把这个script标签append到html页面,可以实现,远程刷新,设置cookie~~~

 

修改用户密码,确保同步

修改用户名,确保同步userrename没有封装好的方法可以直接用,我是自己构建方法,类似add_user,直接把uc discuz数据一起改了。

3.discuz登录,确保tp也登录~~~(discuz中的script代码没抓取出来,未实现,把discuz登录都拦截到tp项目中登录)

 config_global.php配置cookiedomain cookiepath 

 apps.php 配置。

 最后没实现,而是把discuz注册,登录,拦截到tp项目中去的,这样减少不少用户信息冲突~~~

 

(ucenter安装好discuz后,discuz 文件中的config配置,注意:同步discuz登录,需要修改discuz的cookie配置,该文件超级管理才有编辑权限~~~)

需要多用户登录~~~配置好apps.php  ,这个是从ucenter文件中获取的,从ucenter/data/cache/apps.php,同步登录,这里必须最少数组内2个内容;

tp中是session登录的,discuz中script的src传递的是cookie全局设置的方法,需要把cookie的值判断再赋值给session,就可以了。注意:退出销毁2个;

 

2.discuz登录,tp如何可以和discuz也同步登录;

   (见另外一个文章)

    

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM