1 Star 0 Fork 1

1111听听风儿的声音/SSO

forked from TuanZF/SSO 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
SSO.php 3.95 KB
一键复制 编辑 原始数据 按行查看 历史
TuanZF 提交于 2021-07-07 15:53 +08:00 . zzf
<?php
function getrandstr($length){
$str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890';
$randStr = str_shuffle($str);//打乱字符串
$rands= substr($randStr,0,$length);//substr(string,start,length);返回字符串的一部分
return $rands;
}
/*
示例C SSO
*/
class ClassC
{
/**
* 来源
* @var string
*/
protected $source_url;
/**
* 用户登录凭证
* @var string
*/
protected $userToken;
/**
* 用户昵称
* @var string
*/
protected $username;
/**
* redis
*/
protected $redis;
/**
* 构造 获取存在用户信息
*/
public function __construct($redis)
{
$this->redis = $redis;
$this->getCookie();
}
/**
* [getCookie description]
* @return [type] [description]
*/
protected function getCookie()
{
$this->userToken = isset($_COOKIE['USERTOKEN']) ? $_COOKIE['USERTOKEN'] : '';
$this->username = isset($_COOKIE['USERNAME']) ? $_COOKIE['USERNAME'] : '';
}
/**
* 路由
* @return
*/
public function index()
{
if (empty($_GET['a'])) {
exit('Empty Action');
}
$param = isset($_GET['c']) ? trim($_GET['c']) : '';
$this->source_url = isset($_GET['d']) ? trim($_GET['d']) : '';
$action = strtolower($_GET['a']);
$this->$action($param);
}
/**
* 登录页
* @param [type] $param [description]
* @return [type] [description]
*/
public function login($param)
{
if($this->userToken && $this->username) {
if(empty($param)) {
echo '<span>用户'.$this->username.',你已经别的系统登录过了!</span></br><button type="button"><a href="http://a.cn/?token='.$this->userToken.'">返回A系统</a></button><button type="button"><a href="http://b.cn/?token='.$this->userToken.'">返回B系统</a></button>';
exit;
}
} else {
if(empty($param)) {
echo '你没有登录,如何登陆http://c.cn/?a=login&c=您的用户名称,即成功登陆';
exit;
}
}
$token = getrandstr(8);
$username = $param;
setcookie('USERTOKEN', $token, time() + 3600);
setcookie('USERNAME', $username, time() + 3600);
$this->setRedis($token, $username);
echo '<span>用户'.$username.',登录成功!</span></br><button type="button"><a href="http://a.cn/?token='.$token.'">返回A系统</a></button><button type="button"><a href="http://b.cn/?token='.$token.'">返回B系统</a></button>';
}
/**
* [setRedis description]
* @param [type] $token [description]
* @param [type] $username [description]
*/
protected function setRedis($token, $username)
{
$data = [];
$data['token'] = $token;
$data['username'] = $username;
$this->redis->set($token, json_encode($data));
}
/**
* 鉴权
* @param [type] $param [description]
* @return [type] [description]
*/
protected function oauth($param)
{
$redisParam = $this->redis->get($param);
$oauth = (json_decode($redisParam)->token == $param) ? true : false;
if(!$oauth) {
$this->output('5001', '错误Token');
exit;
}
$data = [];
$data['token'] = $param;
$data['username'] = json_decode($redisParam)->username;
$this->output('200', 'ok', $data);
}
/**
* 返回格式
* @param integer $errNo [标识号]
* @param string $errMsg [返回内容]
* @param array $data [返回数据]
* @return [json]
*/
public function output($errNo = 200, $errMsg = 'ok', $data = array())
{
$res['errno'] = $errNo;
$res['errMsg'] = $errMsg;
$res['data'] = $data;
echo json_encode($res);
}
}
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$redis->auth('199407');
$obj = new ClassC($redis);
$obj->index();
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/nbvc/sso.git
git@gitee.com:nbvc/sso.git
nbvc
sso
SSO
master

搜索帮助