owncloud源码分析5--CAS单点登录
程序员文章站
2022-04-21 16:22:36
...
CAS单点登录
一、将CAS的包放到lib\private下面方便引用,如图
二、引入到\owncloud\lib\base.php的976行中的handleLogin()方法,将这个方法的内容改成下面的内容:
if(!$_REQUEST['logout']) {
OC_App::loadApps(array('prelogin'));
}
//引入cas类库
require_once 'private\CAS.php';
phpCAS::setDebug();
// 初始化client
phpCAS::client(CAS_VERSION_2_0, '192.168.6.101', 8080, '/sso');
// 如果sso服务器是https方式的,那么需要配置信任证书。如果是http的方式,那么注释掉此项
// phpCAS::setCasServerCACert('AdminCA1.crt');
phpCAS::setNoCasServerValidation();
// 如果需要用户映射,那么需要设置serverCode,如果不需要可以注释掉
// phpCAS::setServerCode('pt.jcsj');
//处理单点退出请求,第一个参数为false,即为不进行客户端验证
phpCAS::handleLogoutRequests(false, false);
// phpCAS::setNoCasServerValidation();
// 进行认证
phpCAS::forceAuthentication();
if (isset($_REQUEST['logout'])) {
phpCAS::logout();
die;
//header("Location: " . OC::$WEBROOT.(empty(OC::$WEBROOT) ? '/' : ''));
}
// logout if desired
//将下面的值存储到session对象中,如果存在phpCAS的user用户则执行本地登录
//print_r(phpCAS::getAttributes());die;
if(phpCAS::getUser()) {
if (OC_User::login(phpCAS::getUser())) {
$userId = OC_User::getUser();
// setting up the time zone
if (isset($_POST['timezone-offset'])) {
self::$server->getSession()->set('timezone', $_POST['timezone-offset']);
self::$server->getConfig()->setUserValue($userId, 'core', 'timezone', $_POST['timezone']);
}
self::cleanupLoginTokens($userId);
if (!empty($_POST["remember_login"])) {
if (defined("DEBUG") && DEBUG) {
self::$server->getLogger()->debug('Setting remember login to cookie', array('app' => 'core'));
}
$token = \OC::$server->getSecureRandom()->getMediumStrengthGenerator()->generate(32);
self::$server->getConfig()->setUserValue($userId, 'login_token', $token, time());
OC_User::setMagicInCookie($userId, $token);
} else {
OC_User::unsetMagicInCookie();
}
OC_Util::redirectToDefaultPage();
exit();
}
}
还要修改\owncloud\lib\private\user\database.php中的checkPassword方法(158行),改成:
OVER!!$query = OC_DB::prepare('SELECT `uid`, `password` FROM `*PREFIX*users` WHERE LOWER(`uid`) = LOWER(?)'); $result = $query->execute(array($uid)); $row = $result->fetchRow(); if ($row) { //直接返回查询的信息 /*$storedHash = $row['password']; $newHash = ''; if (\OC::$server->getHasher()->verify($password, $storedHash, $newHash)) { if (!empty($newHash)) { $this->setPassword($uid, $password); }*/ return $row['uid']; //} }else{ return false; } return false;
版权声明:本文为博主原创文章,未经博主允许不得转载。
以上就介绍了owncloud源码分析5--CAS单点登录,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
上一篇: PHP是不是世界上最好的语言?
下一篇: 学习Php是自学好,还是上培训班好?