shopnc b2b2c 集成cas 实现SSO 单点登录

请先下载php 的cas客户端代码。


其实做php的sso用的比较多的是 ucenter,这方面的资料也比较多。但是,又是身不由己啊,别人家就是用cas去做sso咱们左右不了滴啊,且不轮其好坏,那么,我们就开始吧。

我们来集成 shopnc b2b2c 和 cas的sso ,其他系统万变不理其中,只要验证了cas已经登录了,就使用原系统的登录方法进行登录。

将cas登录作为一个可开启关闭的功能,关闭cas,就使用原始系统自带的登录,开启cas,就使用cas登录。


首先,找到shopnc的 根目录下的core/shopnc.php

在函数自动加载的位置添加下面的代码,如果不添加的话,shopnc会一直报错说找不到PHP cas客户端相关的类。

require_once(BASE_DATA_PATH.DS.'api'.DS.'cas'.DS.'CAS'.DS.'Autoload.php');


加了之后代码如下:

if(function_exists('spl_autoload_register')) {
	require_once(BASE_DATA_PATH.DS.'api'.DS.'cas'.DS.'CAS'.DS.'Autoload.php');//cas
	spl_autoload_register(array('Base', 'autoload'));
} else {
	function __autoload($class) {
		return Base::autoload($class);
	}
}

然后,我们在配置文件最后面添加配置cas应该有的参数,如下:

//cas 配置
$config['cas']=array(
		//SHOP
		'open'=>1,//是否开启cas登陆
		'cas_port'=>80,//cas 端口,不能加引号
		'cas_host'=>'127.0.0.1',//cas 服务器地址
		'cas_context'=>'cas',//
		'cas_version'=>'2.0',//1.0/2.0/3.0//版本
		'cas_login_url'=>'http://127.0.0.1:80/cas/login',//cas 登陆地址
		'cas_register_url'=>'http://127.0.0.1:80/register',//注册地址

);


再然后,我们在shop/control.php 的 control类 中添加如下函数


function cas_login(){
if($cas_config['open']==1 && $_SESSION['is_login'] !='1'){//cas 登陆
        require_once (BASE_DATA_PATH.DS.'api'.DS.'cas'.DS.'CAS.php');
    	phpCAS::setDebug();
    	phpCAS::client($cas_config['cas_version'],$cas_config['cas_host'],$cas_config['cas_port'],$cas_config['cas_context']);
    	phpCAS::setNoCasServerValidation();
    	if(phpCAS::checkAuthentication())
    	{
           $username = phpCAS::getUser();
           //进行shopnc自己的登录,说白了就是 创建 session,与member_model.php里的creatSession一样,这样就能与整个系统完美融合了。
           $model_member = Model('member');
           $member_info = $model_member->infoMember(array('member_name'=>trim($username)));
    		if(empty($member_info)){
    			$member_info = $model_member->infoMember(array('member_mobile'=>trim($username)));//自己新增的字段<span style="font-family: Arial, Helvetica, sans-serif;">,新版本好像有了,不知字段名称是否一样</span>

    		}
    		if(empty($member_info)){
    			$member_info = $model_member->infoMember(array('member_email'=>trim($username)));//自己新增的字段,新版本好像有了
    		}
    		if(empty($member_info))
    		{//不存在就注册,我喜欢在本地保留一份数据,保证系统数据完整及方便很多操作
	    		$register_info = array();
	    		$register_info['username'] = $username;
	    		$register_info['mobile'] = $username;
	    		$member_info = $model_member->register($register_info,$require_password='false');
    		}
              $model_member->createSession($member_info);//到这里,我们自己的系统就登陆了。
          }
    }
}

基本上,根目录下 shop/ 的其他 控制器都会继承到 control类,例如HomeControl等

所以接下来,我们只需要在前台页面继承的控制器 例如HomeControl的 __contruct函数中引用:

function __contruct{
	$this->cas_login();//这里调用之后,用户就登录了
}


大功告成。


欢迎 加入

php交流群1:201923866 

php交流群2:370648191 

我是群主哦吐舌头~























www.linglingtang.com 零零糖






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值