Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

用CAS实现discuz7单点登录[转]

[复制链接]
cntjdavid 发表于 2009-9-17 19:37:07 | 显示全部楼层 |阅读模式
最近一个项目,用两种语言完成,会员部分和相册是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同步登陆康盛系列产品。(本文仅供学习参考,本人不对修改源程序产生的一切问题负责)
webcdn2 发表于 2009-9-17 19:43:59 | 显示全部楼层
看不明白






东莞桑拿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2025-1-9 02:28 , Processed in 0.026873 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表