thinkphp限制单点用户登录_tp5单点登陆实例源码

本文介绍了如何在ThinkPHP5框架中实现单点登录(SSO)系统,通过核心代码展示了SSOServer类的实现,包括用户验证、缓存处理和登出功能,提供了一个实例供开发者参考。
摘要由CSDN通过智能技术生成

【实例简介】

【实例截图】

【核心代码】

namespace app\sso\logic;

use Jasny\ValidationResult;

/**

* Description of SSOServer

*

* @author lyf <381296986@qq.com>

* @date 2016-11-12

*/

class SSOServer extends \Jasny\SSO\Server {

/**

* Registered brokers

* @var array

*/

private static $brokers = [

'Alice' => ['secret'=>'8iwzik1bwd'],

'Greg' => ['secret'=>'7pypoox2pc'],

'Julias' => ['secret'=>'ceda63kmhp']

];

/**

* System users

* @var array

*/

private static $users = [

'jackie' => [

'fullname' => 'Jackie Black',

'email' => 'jackie.black@example.com',

'password' => '$2y$10$lVUeiphXLAm4pz6l7lF9i.6IelAqRxV4gCBu8GBGhCpaRb6o0qzUO' // jackie123

],

'john' => [

'fullname' => 'John Doe',

'email' => 'john.doe@example.com',

'password' => '$2y$10$RU85KDMhbh8pDhpvzL6C5.kD3qWpzXARZBzJ5oJ2mFoW7Ren.apC2' // john123

],

];

/**

* Get the API secret of a broker and other info

*

* @param string $brokerId

* @return array

*/

protected function getBrokerInfo($brokerId)

{

return isset(self::$brokers[$brokerId]) ? self::$brokers[$brokerId] : null;

}

/**

* Authenticate using user credentials

*

* @param string $username

* @param string $password

* @return ValidationResult

*/

protected function authenticate($username, $password)

{

if (!isset($username)) {

return ValidationResult::error("username isn't set");

}

if (!isset($password)) {

return ValidationResult::error("password isn't set");

}

if (!isset(self::$users[$username]) || !password_verify($password, self::$users[$username]['password'])) {

return ValidationResult::error("Invalid credentials");

}

return ValidationResult::success();

}

/**

* Create a cache to store the broker session id.

*

* @return Cache

*/

protected function createCacheAdapter()

{

return \think\Cache::connect(config('cache.sso'));

//return \think\Cache::store('file');

}

/**

* Get the user information

*

* @return array

*/

protected function getUserInfo($username)

{

if (!isset(self::$users[$username])){

return null;

}

$user = compact('username') self::$users[$username];

unset($user['password']);

return $user;

}

/**

* Log out

*/

public function logout()

{

$this->startBrokerSession();

$this->setSessionData('sso_user', null);

header('Content-type: application/json; charset=UTF-8');

//http_response_code(204);

echo json_encode(['success' => 1]);

exit;

}

/**

* Ouput user information as json.

*/

public function userInfo()

{

$this->startBrokerSession();

$user = null;

$username = $this->getSessionData('sso_user');

if ($username) {

$user = $this->getUserInfo($username);

if (!$user) return $this->fail("User not found", 500); // Shouldn't happen

}

header('Content-type: application/json; charset=UTF-8');

echo json_encode($user);

exit;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值