1.下载扩展
composer require firebase/php-jwt
2. 封装生成TOKEN,解密TOKEN的方法
USE 引入刚刚下载的类
use Firebase\JWT\JWT;
封装
//生成TOKEN
? ? public ?function getToken($user_id)
? ? {
? ? ? ? $key = '8848233';
? ? ? ? $token = array(
? ? ? ? ? ? "iss"=>$key, ? ?//签发人 ?可空
? ? ? ? ? ? "aud"=>'', ? ? ?//受众 ? 可空
? ? ? ? ? ? "iat"=>time(), ?//签发时间
? ? ? ? ? ? "nbf"=>time()-1, ?//生效时间 ?(立即生效)
? ? ? ? ? ? "exp"=>time()+1440, ? //有效期
? ? ? ? ? ? "data"=>[
? ? ? ? ? ? ? ? 'user_id'=>$user_id,
? ? ? ? ? ? ]
? ? ? ? );
? ? ? ? $jwt = JWT::encode($token,$key,"HS256");
? ? ? ? return $jwt;
? ? }
?
? ? ? ? //解密TOKEN
? ? ? ? public ?function getUserId($token)
? ? ? ? {
? ? ? ? ? ? $key = '8848233';
? ? ? ? ? ? try {
? ? ? ? ? ? ? ? JWT::$leeway = 60;//当前时间减去60,把时间留点余地
? ? ? ? ? ? ? ? $decoded = JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应
? ? ? ? ? ? ? ? $arr = (array)$decoded;
? ? ? ? ? ? ? ? $res['data'] = $arr['data'];
? ? ? ? ? ? ? ? return $arr['data']->user_id; ? //解析出来的id 在数组里面的对象
? ? ? ? ? ? } catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
? ? ? ? ? ? ? ?return null;
? ? ? ? ? ? } catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
? ? ? ? ? ? ? ? return null;
? ? ? ? ? ? } catch (\Firebase\JWT\ExpiredException $e) { // token过期
? ? ? ? ? ? ? ? return null;
? ? ? ? ? ? } catch (\Exception $e) { //其他错误
? ? ? ? ? ? ? ? return null;
? ? ? ? ? ? }
? ? ? ? }
1.创建中间接
php artisan make:middleware CheckAge
2.引用创建的中间件
?
protected $routeMiddleware = [
? ? ? ? 'auth' => \App\Http\Middleware\Authenticate::class,
? ? ? ? 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
? ? ? ? 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
? ? ? ? 'can' => \Illuminate\Auth\Middleware\Authorize::class,
? ? ? ? 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
? ? ? ? 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
? ? ? ? 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
? ? ? ? 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
? ? ? ? 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
? ? ? ? 'checkage' => \App\Http\Middleware\CheckAge::class,
? ? ];
3.小程序传入token判断是否有token
class CheckAge
{
? ? /**
? ? ?* Handle an incoming request.
? ? ?*
? ? ?* @param ?\Illuminate\Http\Request ?$request
? ? ?* @param ?\Closure ?$next
? ? ?* @return mixed
? ? ?*/
? ? public function handle(Request $request, Closure $next)
? ? {
? ? ? ? $token=$request->input('token');
? ? ? ? if (!isset($token)){
? ? ? ? ? return ?response()->json(['code'=>1,'msg'=>'缺少token','data'=>null]);
? ? ? ? }
? ? ? ? $res=Common::verifyToken($token);
? ? ? ? if ($res==0){
? ? ? ? ? ?return response()->json(['code'=>1,'msg'=>'请先登录','data'=>null]);
? ? ? ? }
? ? ? ? return $next($request);
? ? }
}
4.路由写法
Route::group(['middleware'=>'checkage'],function (){
Route::get('textgetall',[TextController::class,'textGetAll']);
});
|