You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.1 KiB
67 lines
2.1 KiB
<?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);
|
|
|
|
}
|
|
}
|