以下CAS有关软件可以去 http://www.ja-sig.org/products/cas/downloads/index.html 下载。
CAS server端: cas-server-3.3-release.zip
CAS php客户端:CAS-1.0.1.tgz
解压CAS-1.0.1.tgz,将cas目录和CAS.php复制到discuz目录。
找到discuz的logging.php 这个是登陆入口,在第二行插入
require_once("CAS.php");
define('CAS_SERVER_HOSTNAME', "CAS服务器地址");
define('CAS_SERVER_PORT', 80);
define('CAS_SERVER_APP_NAME', "CAS验证入口");
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());
在它上面加入
$param=array("service"=>"http://localhost/bbs");这里为登出后需要跳转的页面,当然服务器端需要配置:
1.服务端cas-servlet.xml配置
<bean id="logoutController" class="org.jasig.cas.web.LogoutController" ... .../>
增加属性 p:followServiceRedirects="true"
phpCAS::logout($param);
之后找到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登录后返回的用户名进行登录,修改discuz的登录链接,不要使用弹出式的。没有用密码做ucenter同步登陆,可能不太安全,其实也可以从CAS取得用户名的同时再申请取得密码给$password,这样的话就不需要修改uc_client 目录下的两个
user.php文件了。推荐还是从CAS同时取得密码,这样安全些。 至此discuz不但能通过CAS实现与其他系统的同步登陆,同时能够实现同过ucenter同步登陆康盛系列产品。(本文仅供学习参考,本人不对修改源程序产生的一切问题负责)