用CAS实现discuz7单点登录
2010-02-24 16:18
323 查看
用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同步登陆康盛系列产品。(本文仅供学习参考,本人不对修改源程序产生的一切问题负责)
最近一个项目,用两种语言完成,会员部分和相册是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同步登陆康盛系列产品。(本文仅供学习参考,本人不对修改源程序产生的一切问题负责)
相关文章推荐
- java和Discuz论坛实现单点登录,通过Ucenter(用户管理中心)
- CAS实现单点登录SSO执行原理探究(终于明白了)
- CAS 在 Tomcat 中实现单点登录
- CAS在Tomcat中实现单点登录
- java前后端分离项目整合CAS实现单点登录解决方案
- CAS 实现站内单点登录及实现第三方 OAuth、OpenId 登录(二)
- CAS实现单点登录(SSO)经典完整教程(1)
- spring + shiro + cas 实现sso单点登录
- discuz x3.1实现QQ登录
- 使用 CAS 在 Tomcat6 中实现单点登录
- 使用 CAS 在 Tomcat 中实现单点登录
- Shiro与CAS整合实现单点登录
- SpringSecurity3整合CAS实现单点登录
- CAS 实现单点登录(SSO)简单实例demo(二)
- 【IBM】使用 CAS 在 Tomcat 中实现单点登录
- 使用 CAS 在Tomcat 中实现单点登录
- cas实现单点登录
- 使用 CAS 在 Tomcat 中实现单点登录
- 使用 CAS 在 Tomcat 中实现单点登录
- 单点登录----->cas实现单点登录