Middleware中间件实现用户是否登录控制

1.创建中间件OAuthOperationCenter.php

2.`<?php

namespace App\Middleware;

use Closure;
use App\Tools\OperationCenter\Token;
use Illuminate\Support\Facades\Redis as RedisClient;

class OAuthOperationCenter
{
/**
* TOKEN_KEY string
*/
private const TOKEN_KEY = “-OPERATION-CENTER-TOEKN”;

/**
 * @var string
 */
protected $token;

/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle($request, Closure $next)
{
    if ( !array_key_exists('authorization',$request->header()) ){
        error('400','缺少authorization参数');
    }
    if ( empty($request->header()['authorization']) ){
        error('400','authorization参数值不能为空');
    }
    $this->token = $request->header('authorization');
    $this->token= trim(ltrim($this->token,'Bearer'));
    $userInfo = Token::decodeToken($this->token);
    $userRedis = RedisClient::get($userInfo['username'].self::TOKEN_KEY);
    if ( empty($userRedis) ){
        error('403','您还未登录,请先登录','Unauthorized');
    }
    return $next($request);
}

}
`

Token.php

<?php
/**
 * Created by PhpStorm.
 * Date: 20-8-26
 * Time: 下午3:51
 */
namespace App\Tools\OperationCenter;



class Token
{


    /**
     * Notes:生成token
     * Date: 20-8-26
     * Time: 下午4:09
     * @param $data
     * @return string
     */
    public static function enableToken($data) : string
    {
        return  base64_encode(json_encode($data,512));
    }

    /**
     * Date: 20-8-26
     * Time: 下午4:08
     * @param $data
     * @return array
     */
    public static function decodeToken($data) : array
    {
        return json_decode( base64_decode(str_replace(" ","+",$data)),true);
    }




}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太阳上的雨天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值