name) !== '' && preg_match('/^1\d{10}$/', (string) $user->getRawOriginal('mobile')); } private function tokenUser($bearer) { if (!is_string($bearer) || $bearer === '') return null; $token = PersonalAccessToken::findToken($bearer); if (!$token || !($token->tokenable instanceof User)) return null; if ($token->expires_at && !\Illuminate\Support\Carbon::parse($token->expires_at)->isFuture()) return null; if (config('sanctum.expiration') && !$token->created_at->gt(now()->subMinutes(config('sanctum.expiration')))) return null; return $token->tokenable; } public function handle($request, Closure $next, $mode = 'member') { $user = $this->tokenUser($request->bearerToken() ?? $request->token); if ($mode === 'optional') { auth()->guard('mobile')->forgetUser(); if ($user) auth()->guard('mobile')->setUser($user); return $next($request); } if (!$user) return $this->fail([40001, '请重新登录']); if (!self::registered($user)) return $this->fail([10003, '请先登录或注册后使用此功能']); auth()->guard('mobile')->setUser($user); return $next($request); } }