67 lines
2.1 KiB
67 lines
2.1 KiB
3 months ago
|
<?php
|
||
|
|
||
|
namespace app\home\middleware;
|
||
|
|
||
|
use app\model\UserModel;
|
||
|
use think\facade\Cache;
|
||
|
use think\facade\Config;
|
||
|
use think\Request;
|
||
|
|
||
|
/**
|
||
|
* @desc 必须要登陆的接口 校验是否登陆
|
||
|
*/
|
||
|
class AuthMiddleware
|
||
|
{
|
||
|
|
||
|
public function handle(Request $request, \Closure $next)
|
||
|
{
|
||
|
|
||
|
// OPTIONS 请求直接返回空响应
|
||
|
if ($request->method(true) === 'OPTIONS') {
|
||
|
return response()->send();
|
||
|
}
|
||
|
$header = $request->header();
|
||
|
if(!isset($header['language'])){
|
||
|
$request->lang=Config::get('lang.default_lang');
|
||
|
}else{
|
||
|
$lang_list=Config::get('lang.allow_lang_list');
|
||
|
$lang=strtolower($header['language']);
|
||
|
if(in_array($lang,$lang_list)){
|
||
|
$request->lang=$lang;
|
||
|
}else{
|
||
|
$request->lang=Config::get('lang.default_lang');
|
||
|
}
|
||
|
}
|
||
|
if(empty($header['token'])){
|
||
|
return json(['code' => '100403', 'message' => 'login please','data' => []]);
|
||
|
}
|
||
|
if(!is_string($header['token'])){
|
||
|
return json(['code' => '100403', 'message' => 'login please','data' => []]);
|
||
|
}
|
||
|
|
||
|
$tokenUserKey = 'TOKEN:USER:'.$header['token'];
|
||
|
$userId = Cache::store('redis')->get($tokenUserKey);
|
||
|
if(empty($userId) || $userId <= 0){
|
||
|
return json(['code' => '100403', 'message' => 'login please','data' => []]);
|
||
|
}
|
||
|
|
||
|
// 查找用户信息
|
||
|
$user = UserModel::getFieldsByUserId('status,user_id', $userId);
|
||
|
if(empty($user)){
|
||
|
return json(['code' => '100403', 'message' => 'no user','data' => []]);
|
||
|
}
|
||
|
|
||
|
if($user['status'] != UserModel::STATUS_ON){
|
||
|
return json(['code' => '100403', 'message' => 'no auth','data' => []]);
|
||
|
}
|
||
|
|
||
|
$request->userId = $userId;
|
||
|
$userTokenKey = 'USER:TOKEN:'.$request->userId;
|
||
|
|
||
|
$expire = 30 * 24 * 60 * 60;
|
||
|
Cache::store('redis')->set($userTokenKey, $header['token'], $expire);
|
||
|
Cache::store('redis')->set($tokenUserKey, $request->userId, $expire);
|
||
|
return $next($request);
|
||
|
|
||
|
}
|
||
|
}
|