validate( rules: [ 'username' => ['bail', 'required'], 'password' => ['bail', 'required'], ], attributes: [ 'username' => '账号', 'password' => '密码', ], ); $adminUser = AdminUser::where('username', $validated['username'])->first(); if (is_null($adminUser?->password) || ! Hash::check($validated['password'], $adminUser->password)) { throw ValidationException::withMessages([ 'username' => ['账号或密码错误'], ]); } if ($adminUser->lock) { throw new RuntimeException('您的账号已被锁定,需要联系超级管理员解锁。'); } $employee = Employee::where('admin_user_id', $adminUser->id)->first(); if (is_null($employee)) { throw new RuntimeException('员工未找到'); } if ($employee->isResigned()) { throw new RuntimeException('员工已离职'); } $employee->tokens()->delete(); /** @var \Laravel\Sanctum\NewAccessToken */ $accessToken = $employee->createToken( name: 'api', expiresAt: now()->addDays(15), ); return [ 'token' => $accessToken->plainTextToken, ]; } public function destroy(Request $request) { /** @var Employee */ if ($employee = $this->guard()->user()) { $employee->tokens()->delete(); } return response()->noContent(); } }