method()) == "OPTIONS") { return response(); } // 过滤前后空格 $request->filter(['trim']); $token = $request->header('token'); // 无需登录 if (empty($token) && $this->isNotNeedLogin($request)) { return $next($request); } //token验证,并生成缓存 $validateError = ''; try { validate(TokenValidate::class)->check(['token' => $token]); $adminInfo = (new ShopAdmin())->alias('a') ->join('shop_session ss', 'a.id=ss.admin_id') ->join('shop s', 's.id = a.shop_id') ->where(['ss.token' => $token]) ->field('a.*,ss.token,ss.client,s.name as shop_name') ->hidden(['password']) ->findOrEmpty(); $adminInfo = $adminInfo ? $adminInfo->toArray() : []; // 设置缓存 cache($token, $adminInfo); // 设置用户信息 $request->admin_info = $adminInfo; return $next($request); } catch (ValidateException $e) { $validateError = $e->getError(); } //无需要登录,带token的情况 if ($this->isNotNeedLogin($request) && $token) { return $next($request); } //登录失败 $result = array( 'code' => -1, 'show' => 1, 'msg' => $validateError, 'data' => [] ); return json($result); } /** * @notes 是否需要登录 * @param $request * @return bool // false-需要; true-不需要 * @author 段誉 * @date 2021/11/10 11:10 */ private function isNotNeedLogin($request) { $controllerObj = invoke('\\app\\shopapi\\controller\\' . $request->controller()); $data = $controllerObj->like_not_need_login; if (empty($data)) { return false; } return in_array($request->action(), $data); } }