用CAS实现discuz7单点登录

来源:互联网 发布:淘宝开店如何选择产品 编辑:程序博客网 时间:2024/06/11 05:06

用CAS实现discuz7单点登录
最近一个项目,用两种语言完成,会员部分和相册是jsp,其他的部分是discuz7+ucenter1.5+uchome2+ecmall2,php的。不同系统不同语言,同步登录问题就摆在眼前了。要求用jsp部分的会员信息作为登录信息。实现方案是采用CAS。php部分的几个系统有ucenter来实现登录整合,当前的问题是PHP与jsp之间的登录整合。服务器端CAS安装网上很多介绍,CAS的PHP端用PHPCAS。下面介绍discuz的代码改造

其实也很简单。找到discuz的logging.php 这个是登陆入口,在第二行插入
define('CAS_ENABLE', true);
define('CAS_SERVER_HOSTNAME', "CAS服务器地址");
define('CAS_SERVER_PORT', 80);
define('CAS_SERVER_APP_NAME', "CAS验证入口");
require_once("CAS.php");
phpCAS::client(CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME);
phpCAS::setNoCasServerValidation();
phpCAS::forceAuthentication();

if($action<>'logout'){
unset($_COOKIE);
$action='login';
$username = phpCAS::getUser();
$password = '';
$loginsubmit='yes';
$cookietime="2592000";
$allowsynlogin = 1;
}

找到这行showmessage('logout_succeed', dreferer()); 在它上面加入
phpCAS::logout();

之后找到uc_client /control目录下的user.php 注释掉第123行开始的

elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
    $status = -2;
   } elseif($checkques && $user['secques'] != '' && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
    $status = -3;
   }

找到uc_client /model目录下的user.php ,注释掉第100行开始的

elseif($user['password'] != md5(md5($password).$user['salt'])) {
    return -2;}

代码改造结束,这样discuz利用CAS登录后返回的用户名进行登录。没有用密码做ucenter同步登陆,可能不太安全,其实也可以从CAS取得用户名的同时再申请取得密码给$password,这样的话就不需要修改uc_client 目录下的两个user.php文件了。推荐还是从CAS同时取得密码,这样安全些。

至此discuz不但能通过CAS实现与其他系统的同步登陆,同时能够实现同过ucenter同步登陆康盛系列产品。(本文仅供学习参考,本人不对修改源程序产生的一切问题负责)

原创粉丝点击