header('token'); //判断接口是否免登录 $isNotNeedLogin = $request->controllerObject->isNotNeedLogin(); //不直接判断$isNotNeedLogin结果,使不需要登录的接口通过,为了兼容某些接口可以登录或不登录访问 if (empty($token) && !$isNotNeedLogin) { //没有token并且该地址需要登录才能访问, 指定show为0,前端不弹出此报错 return JsonService::fail('请求参数缺token', [], 0, 0); } $coachInfo = (new CoachUserTokenCache())->getCoachUserInfo($token); if (empty($coachInfo) && !$isNotNeedLogin) { //token过期无效并且该地址需要登录才能访问 return JsonService::fail('登录超时,请重新登录', [], -1, 0); } //token临近过期,自动续期 if ($coachInfo) { //获取临近过期自动续期时长 $beExpireDuration = Config::get('project.user_token.be_expire_duration'); //token续期 if (time() > ($coachInfo['expire_time'] - $beExpireDuration)) { $result = CoachUserTokenService::overtimeToken($token); //续期失败(数据表被删除导致) if (empty($result)) { return JsonService::fail('登录过期', [], -1); } } } //todo 重新查询sql,赋值,这里有优化的空间 if($coachInfo && (CoachEnum::AUDIT_STATUS_WAIT == $coachInfo['audit_status'] || empty($coachInfo['audit_status']))){ $coach = Coach::where(['coach_user_id'=>$coachInfo['coach_user_id']]) ->order('id desc') ->field('id,audit_status') ->find(); $coachInfo['audit_status'] = $coach->audit_status ?? 0; $coachInfo['coach_id'] = $coach->id ?? 0; $request->coachId = $coach->id ?? 0; } //给request赋值,用于控制器 $request->coachInfo = $coachInfo; $request->coachUserId = $coachInfo['coach_user_id'] ?? 0; return $next($request); } }