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

来源:互联网 发布:anaconda python 使用 编辑:程序博客网 时间:2024/06/04 17:41

请先下载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');//casspl_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 零零糖






0 0