php 模拟 cas,PHP discuz3.2 cas
先將CAS PHP版支持包引入,然后進入下面環節。下載地址http://developer.jasig.org/cas-clients/php/1.3.4/CAS-1.3.4.tgz 1.去除登錄輸入
upload\template\default\member\login-simple.html
刪除8-29行代碼,刪除31-32行代碼
2.去除彈框登錄
upload/admin.php-=》界面-》去掉浮動窗口(登錄)
3.在CAS文件夾中創建CasClientConfig.php
define ( 'CAS_SERVER_HOSTNAME', '192.168.32.7' );
define ( 'CAS_SERVER_PORT', 8080 );
define ( 'CAS_SERVER_APP_NAME', "cas_server" );
?>
4.在CAS文件中創建CasClient.php
require_once DISCUZ_ROOT.'./CAS/CasClientConfig.php'; // 注意
require_once DISCUZ_ROOT.'./CAS.php'; // 注意
// 初始化
//phpCAS::setDebug ();
// initialize phpCAS
phpCAS::client ( CAS_VERSION_2_0, CAS_SERVER_HOSTNAME, CAS_SERVER_PORT, CAS_SERVER_APP_NAME );
// no SSL validation for the CAS server
phpCAS::setNoCasServerValidation ();
?>
5.source/class/class_core.php第16行加入
require_once DISCUZ_ROOT."Cas/CasClient.php";
6.uc_client/control/user.php
134行注釋
//elseif($user['password'] != md5($passwordmd5.$user['salt'])) {
//$status = -2;
//} elseif($checkques && $user['secques'] != $_ENV['user']->quescrypt($questionid, $answer)) {
//$status = -3;
//}
注釋 onsynlogin、onsynlogout、onregister方法
7.source/function/member.php加入
// 新加的方法,用以支持CAS 登錄
function userloginCas($username, $ip = '') {
$return = array ();
if(!function_exists('uc_user_login')) {
loaducenter();
}
$return['ucresult'] = uc_user_login(addslashes($username), '', 0, 0,'', '', $ip);
$tmp = array ();
$duplicate = '';
list ( $tmp ['uid'], $tmp ['username'], $tmp ['password'], $tmp ['email'], $duplicate ) = $return ['ucresult'];
$return ['ucresult'] = $tmp;
if ($duplicate && $return ['ucresult'] ['uid'] > 0 || $return ['ucresult'] ['uid'] <= 0) {
$return ['status'] = 0;
return $return;
}
$member = getuserbyuid ( $return ['ucresult'] ['uid'], 1 );
if (! $member || empty ( $member ['uid'] )) {
$return ['status'] = - 1;
return $return;
}
$return ['member'] = $member;
$return ['status'] = 1;
if ($member ['_inarchive']) {
C::t ( 'common_member_archive' )->move_to_master ( $member ['uid'] );
}
if ($member ['email'] != $return ['ucresult'] ['email']) {
C::t ( 'common_member' )->update ( $return ['ucresult'] ['uid'], array (
'email' => $return ['ucresult'] ['email']
) );
}
return $return;
}
8.source/class/class_member.php
51行注釋并改為
//if(!submitcheck('loginsubmit', 1, $seccodestatus)) {
if (1 == 2) {
92行 $_G['username'] = $_G['member']['username'] = $_G['member']['password'] = '';后加入
phpCAS::setNoClearTicketsFromUrl ();
//這里會檢測服務器端的退出的通知,就能實現php和其他語言平臺間同步登出了
phpCAS::handleLogoutRequests();
$username='';
if(phpCAS::isAuthenticated()){
$username = phpCAS::getUser ();
} else {
phpCAS::forceAuthentication ();
}
//if(!$_GET['password'] || $_GET['password'] != addslashes($_GET['password'])) {
//showmessage('profile_passwd_illegal');
//}
//$result = userlogin($_GET['username'], $_GET['password'], $_GET['questionid'], $_GET['answer'], $this->setting['autoidselect'] ? 'auto' : $_GET['loginfield'], $_G['clientip']);
$result = userloginCas($username, $_G['clientip']);
347行 on_logout方法
if(defined('IN_MOBILE')) {
showmessage('location_logout_succeed_mobile', dreferer(), array('formhash' => FORMHASH, 'referer' => rawurlencode(dreferer())));
} else {
$service = ?dreferer () ?;
phpCAS::logoutWithRedirectService ( $service );
//showmessage('logout_succeed', dreferer(), array('formhash' => FORMHASH, 'ucsynlogout' => $ucsynlogout, 'referer' => rawurlencode(dreferer())));
}
386行 on_register方法中
if(strpos($url_forward, $this->setting['regname']) !== false) {
$url_forward = 'forum.php';
}
修改掉防止當登錄成功時無限跳轉
$url_forward = 'forum.php';
去除https CAS\Client.php
$this->_server['base_url'] = 'https://' . $this->_getServerHostname();
改為
$this->_server['base_url'] = 'http://' . $this->_getServerHostname();
關閉gateway CAS\Client.php
$this->redirectToCas(true/* gateway */);
改為
$this->redirectToCas(false/* gateway */);
待續(缺少PHP監聽CAS cookie中的賬號phpCAS:checkAuthentication() 不存在就清理session完畢)
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的php 模拟 cas,PHP discuz3.2 cas的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何使用matlab得出pid控制参数值
- 下一篇: 梅森增益matlab求解,梅森公式互不接