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']);
});