p2 project
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.

69 lines
2.2 KiB

<?php
namespace app\home\middleware;
use app\model\UserModel;
use think\facade\Cache;
use think\facade\Config;
use think\facade\Lang;
use think\facade\Log;
use think\Request;
/**
* @desc 必须要登陆的接口 校验是否登陆
*/
class AuthMiddleware
{
public function handle(Request $request, \Closure $next)
{
// OPTIONS 请求直接返回空响应
if ($request->method(true) === 'OPTIONS') {
return response()->send();
}
// 设置多语言
Config::set(['default_lang'=>'zh-jp'], 'lang'); // P2 默认设置日语
$request->lang = Config::get('lang.default_lang');
$header = $request->header();
if (isset($header['language'])) {
$lang_list = Config::get('lang.allow_lang_list');
$lang = strtolower($header['language']);
if (in_array($lang, $lang_list)) {
Lang::setLangSet($lang);
$request->lang = $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);
}
}