cas, casphp, discuz整合成功案例

1. 屏蔽"密码和安全问题"
1.1 打开 /templates/default/personal_navbar.htm
1.2 找到65行, 会有
<li{if CURSCRIPT=='memcp' && $action == 'profile' && $typeid == '1'} class="current"{/if}><a href="memcp.php?action=profile&typeid=1">{lang memcp_profile_security}</a></li>
1.3 将上面的语句注释掉
1.4 代码修改更新后, 进入论坛后台, 调用 "工具"->"更新缓存" 然后执行更新缓存的操作. 因为这些静态页面全部做了缓存的.

2. 拦截登录/注册按钮, 以便自定义
2.1 打开 /include/common.js
2.2 找到 839行, 会有:
function showWindow(k, url, mode, cache) {
2.3 在这行的下一行添加:
if(k == 'register'){
window.location.href="http://192.168.41.219/register?returnurl=" + encodeURIComponent(window.location.href);
return;
}
if(k == 'login'){
window.location.href="http://192.168.41.219/login?service=" + encodeURIComponent(window.location.href);
return;
}
2.4 上面的代码主要是判断注册/登录事件, 并且进行跳转
2.5 代码修改更新后, 进入论坛后台, 调用 "工具"->"更新缓存" 然后执行更新缓存的操作. 因为这些静态页面全部做了缓存的.

3. 整合CAS
3.1 下载phpCas, 并放到论坛根目录
3.2 将login.php放入论坛根目录
3.3 整合
3.3.1 打开 include/common.inc.php
3.3.2 在最后 "?>"的前面添加:
require_once DISCUZ_ROOT.'./login.php';
3.4 修改密码验证
3.4.1 打开 uc_client/control/user.php
3.4.2 找到 122, 123 行, 并把它们注释掉, 如:
//} elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
//$status = -2;
3.4.3 打开 uc_client/model/user.php
3.4.4 找到 100, 101 行, 并把它们注释掉, 如:
//} elseif($user['password'] != md5(md5($password).$user['salt'])) {
//return -2;
3.4.5 上面两个主要是去掉登录时的密码验证, 某种意义上来说, 可能不是很安全, 所以, 如果能把CAS SERVER修改来返回密码信息, 请还原这两个地方.
3.5 同步退出.
3.5.1 打开 logging.php .
3.5.2 第20行那个if块就是处理退出的逻辑.
if($action == 'logout' && !empty($formhash)) {
3.5.3 注释掉下面的逻辑块:
if($formhash != FORMHASH)
3.5.4 注释掉最后一句:
showmessage('logout_succeed', $re);
3.5.5 在最后一句后面添加:
phpCAS::logout(array('service'=>$re));
4. 其它
4.1 nginx 配置中的 server_name 配置
每台服务器是可以映射多个域名的, 以及多个应用的, 而PHP本身是得不到这些信息的, 所以通过nginx的这个配置进行设置, 并通过一些特殊的方式传给PHP, 所以, 这里一定要配置正确, 不然, 很有可能会导致一些莫名其妙的问题哦~~~
4.2 强制验证, 下面这条语句是强制验证, 即, 如果用户没有登录, 那么就直接跳转到登录界面, 在我们这次整合中并没有使用它. 因为如果使用它的话, 游客将无法进入论坛进行查询信息了.
4.3 同步退出, PHPCAS需要监控其它应用的退出请求, 那么就需要添加下面的这条语句. 基本, 第二个参数是指casServer的地址, 不然是收不到其它应用的退出信息的.
phpCAS::handleLogoutRequests(true, array("192.168.41.210"));
phpCAS::forceAuthentication();
这里再说细一点, 很多人都会遇到无法实现单点退出的功能, 程序A退出了, 程序B却不退出. 还有, 上面第二个参数代表着什么呢?
cas server 在收到一应用的退出消息的时候, 需要向所有登录过的应用广播这个消息. 所以, 上面第二个参数就是cas Server在广播的时候使用的地址, 当是cas server访问应用的时候是使用的局域网地址时, 那么, 上面就应该监控局域网IP, 如果是通过外网IP访问的, 那就应该使用外网IP或者域名.
为什么cas server会使用局域网IP呢? 程序本身是不会使用局域网IP的. 因为cas server收到应用的登录请求的时候, 它得到的是应用的域名,比如:www.xxx.com. 但是, 有的时候出于安全性的考虑,你的Cas server 服务器不能访问外网怎么办? (我们就遇到了这种情况)没法呀, 要实现这个功能. 最终, 我们修改了系统的hosts文件来实现域名映射, 直接将域名映射到局域网的IP上.这样, 应用收到的就是局域网IP了.
如果你遇到无法实现单点退出, 那你就检查一下, cas server能不能连接外网, 以及监控的地址是什么.






猜你喜欢

转载自juqkai.iteye.com/blog/1262450
Cas