> ## Documentation Index
> Fetch the complete documentation index at: https://exosphere-auto-translate-docs-20260624-1149.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 로그인

> CLI에서 FailproofAI에 로그인하여 리마인더 및 개인화된 기능을 활성화합니다

```bash theme={null}
failproofai auth login    # 이메일 + 일회용 코드
failproofai auth logout   # 현재 세션 취소
failproofai auth whoami   # 로그인된 계정 정보 출력
```

하위 호환성을 위해 기존의 `--login` / `--logout` / `--whoami` 플래그 형식도 별칭으로 계속 사용할 수 있습니다.

인증은 선택 사항입니다. 정책, 대시보드, `/audit` 페이지를 비롯한 모든 로컬 기능은 로그인 여부와 관계없이 동일하게 작동합니다. 로그인 기능은 안정적인 신원이 **필요한** 기능(현재는 재감사 리마인더, 향후 더 많은 기능 예정)을 위한 기반을 제공하기 위해 존재합니다.

## 로그인 흐름

```bash theme={null}
failproofai auth login
```

이메일 입력을 요청하고, 해당 주소로 6자리 일회용 코드를 발송하며, 코드 입력을 요청합니다. 성공 시 `~/.failproofai/auth.json` (모드 `0600`)이 저장됩니다. 동일한 세션은 인앱 대시보드에서도 확인할 수 있으며, `/audit`에서 `[ set a reminder ]`를 클릭하면 로그인된 상태로 인식됩니다.

대시보드는 CLI를 사용하지 않는 사용자를 위해 `/audit`에서 모달 다이얼로그 형태로 동일한 흐름을 제공합니다.

## 로그아웃

```bash theme={null}
failproofai auth logout
```

서버에서 현재 세션을 취소하고 `~/.failproofai/auth.json`을 삭제합니다. API 서버에 연결할 수 없는 경우에도 로컬 파일은 삭제됩니다 — 로컬에서의 로그아웃 의도가 항상 우선합니다.

## 계정 확인

```bash theme={null}
failproofai auth whoami
```

유효한 세션이 있을 경우 `<email> (<user uuid>)`를 출력하고 종료 코드 0으로 종료하며, 로그인되지 않은 경우 `not signed in`을 출력하고 종료 코드 1로 종료합니다. 액세스 토큰이 만료 1분 이내인 경우 백그라운드에서 자동으로 갱신합니다.

## 지속적인 재감사 리마인더

`/audit` 페이지에서 **`[ set a reminder ]`** 를 클릭하거나 해당 버튼이 연결된 모달을 통해 로그인하면, 대시보드가 `~/.failproofai/next-audit.json`에 소형 보조 파일을 생성합니다:

```json theme={null}
{
  "next_audit_at": 1780765200,
  "user_email": "you@example.com",
  "set_at": 1780160574
}
```

이 파일은 설정한 이메일 계정에 귀속됩니다 — CLI 세션을 다른 계정으로 전환하면 이전 사용자에게 속한 리마인더는 표시되지 않습니다. 기본 오프셋은 **7일**이며, 스케줄러가 도입되면 이후에 설정 가능합니다. `auth.json`과 동일하게 `0600` 권한으로 생성됩니다.

대시보드의 `/api/auth/reminder` 엔드포인트는 활성 세션이 필요하며 `GET`(조회), `POST`(설정/재예약), `DELETE`(삭제)를 지원합니다.

## `~/.failproofai/auth.json` 내용

```json theme={null}
{
  "access_token": "eyJhbGc…",
  "refresh_token": "9ede3e…",
  "access_expires_at": 1780160574,
  "refresh_expires_at": 1782748974,
  "user": { "id": "<uuid>", "email": "you@example.com" }
}
```

`0600` 권한(소유자 전용 읽기/쓰기)으로 생성됩니다. 액세스 토큰은 유효 기간 1시간의 HS256 JWT이며, 리프레시 토큰은 서버가 `SHA-256(token)` 형태로 저장하는 불투명한 256비트 난수 문자열입니다. 리프레시 토큰 재사용이 서버 측에서 감지되면 해당 사용자의 모든 세션이 취소됩니다.

## 환경 변수

| 변수                     | 기본값                          | 용도                                                         |
| ---------------------- | ---------------------------- | ---------------------------------------------------------- |
| `FAILPROOF_API_URL`    | `https://api.befailproof.ai` | API 서버 기본 URL을 재정의합니다. 자체 호스팅된 API 서버를 대상으로 로컬 개발 시 유용합니다. |
| `FAILPROOFAI_AUTH_DIR` | `~/.failproofai`             | `auth.json`이 저장되는 경로를 재정의합니다. 주로 테스트 용도로 사용합니다.            |

전체 목록은 [환경 변수](/ko/cli/environment-variables)를 참조하세요.

## 문제 해결

**"Could not reach the api-server"** — CLI가 `FAILPROOF_API_URL`로 TCP 연결을 열 수 없습니다. 네트워크를 확인하거나, 자체 호스팅 API 서버를 사용 중인 경우 `FAILPROOF_API_URL`을 설정하세요.

**"Rate limited"** — 해당 이메일(이메일당 5회) 또는 IP(IP당 20회)에 대해 15분 이내에 로그인 시도가 너무 많거나, 동일 이메일에 대한 이전 요청 이후 30초 재발송 대기 시간이 적용된 경우입니다. 오류 메시지에 재시도 가능 시간(초)이 포함됩니다.

**코드 거부** — OTP가 잘못되었거나, 만료되었거나, 5회 오답 잠금에 도달한 경우입니다. `failproofai auth login`을 다시 실행하여 새 코드를 요청하세요.
