bbs api uc.php,dedecms和bbs整合ucenter同步登录

Dedecms和discuz -x2.5同步登录

1:先配置好ucenter通信成功;添加dedecms和discuz两个应用,

最关键的是两个应用的配置文件:

比如dedecms的配置文件是include/common.inc.php,所以在这个文件里面加入下面的代码:

define('UC_CONNECT','mysql');

define('UC_DBHOST','127.0.0.1');

define('UC_DBUSER','root');

define('UC_DBPW','123456');

define('UC_DBNAME','ucenter');

define('UC_DBCHARSET','gbk');

define('UC_DBTABLEPRE','`ucenter`.uc_');

define('UC_DBCONNECT','0');

define('UC_KEY','2erwr34gthy5uy78hku7k'); //这里的uc_key对应与ucenter的key,要一模一样。

define('UC_API','http://test.juniar.com/ ucenter1.6'); //ucenter的安装的网站地址

define('UC_CHARSET','gbk');

define('UC_IP','');

define('UC_APPID','1');

define('UC_PPP','20');

discuz的配置文件config/config_ucenter.php,参考下,不多说。

各应用必须开启同步登录。

ucenter一般从目录data下的cache/apps.php读取。

2:说下原理,要实现的是 我从dedecms登录,同步登录到bbs下面,这个过程是这样的

1)    从dedecms登录,在登录文件index_do.php里面处理,通过dedecms自身网站的验证后,再调用同步登录函数uc_user_synlogin,这个函数在本应用(dedecms)下的uc_client下的client.php文件里面;

2)    Uc_user_synlogin函数调用了uc_api_post,向ucenter的index.php页面发送请求,获得model为user,action为syslogin的值。

3)    Ucenter之后调用control目录下的user.php文件的onsynlogin函数,通过foreach循环,以javascript的方式通知ucenter下的各应用,对开启同步登录的应用进行同步登录。

形如这样的:

$synstr .='';

这里传过去的url就对应到了各应用api下的uc.php文件了。

4)    (各应用的)这里是bbs下的uc.php文件,这个文件下的synlogin函数,用$get处理请求过来的数据,通过P3P 协议,设置本站的cookie,就实现了同步登录。

3:代码附录

Dedecms登录处理:

1)index_do.php

if(defined('UC_API') && @include_onceDEDEROOT.'/uc_client/client.php')

{

//检查帐号

list($uid, $username,$password, $email) = uc_user_login($userid, $pwd);

if($uid > 0) {

echouc_user_synlogin($uid);

//echo '登录成功!';

} elseif($uid == -1) {

//echo '用户不存在,或者被删除';

$result =$dsql->GetOne("SELECT email FROM `#@__member` WHERE userid='{$userid}'");

$uid_=uc_user_register($userid , $pwd , $result['email']);

echouc_user_synlogin($uid_);

} elseif($uid == -2) {

echo '密码错';

} else {

echo '未定义';

}

}

Discuz一般不用改,集成了。

2)如果dedecms 表member的字段uid存储的是email或者更长的字符的话,需要修改应用下的uc_client/model/user.php文件check_username函数,

if($len > 15|| $len < 3 …修改 15 为更大的值,起码要容纳下字段uid的存储空间。

3)最后修改的就是各应用下的api/uc.php文件了。

Dedecms应用下api/uc.php函数synlogin:

function synlogin($get, $post)

{

$uid = $get['uid'];

$username = $get['username'];

$password = $get['password'];

$email = $get['email'];

if(!API_SYNLOGIN)

{

return API_RETURN_FORBIDDEN;

}

//note 同步登录 API 接口

header('P3P: CP="CURa ADMa DEVaPSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

$result =$this->db->GetOne("SELECT mid,pwd FROM `#@__member` WHERE userid='{$uid}' or email='{$email}'");

if(!empty($result))

{

include_onceDEDEINC.'/memberlogin.class.php';

$cfg_ml = new MemberLogin(86400);

$cfg_ml->PutLoginInfo($result['mid']);

}else{

$sql = "insert into`#@__member`(userid,pwd,uname,email) values('{$email}','{$password}','{$username}','{$email}')";

$this->db->query('me',$sql);

$mid=$this->db->GetLastID();

include_onceDEDEINC.'/memberlogin.class.php';

$cfg_ml = new MemberLogin(86400);

$cfg_ml->PutLoginInfo($mid);

}

}

Discuz(bbs)下api/uc.php函数synlogin:

function synlogin($get, $post) {

global $_G;

if(!API_SYNLOGIN) {

return API_RETURN_FORBIDDEN;

}

header('P3P: CP="CURa ADMa DEVaPSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');

$cookietime = 31536000;

$uid = intval($get['uid']);

$username = $get['username'];

$password = $get['password'];

$email = $get['email'];

if(($member = getuserbyuid($uid, 1))) {

dsetcookie('auth',authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);

} else {

$time = time();

DB::query("INSERT INTO" . $this -> tablepre ."common_members(uid,username,password,email,groupid,regdate,timeoffset)VALUES ($uid,'$username','$password','$email',10,{$time},9999)");

dsetcookie('auth',authcode("$password\t$uid", 'ENCODE'), $cookietime);

}

}

同步登录处理完成。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值