> ## Documentation Index
> Fetch the complete documentation index at: https://docs.befailproof.ai/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(20회/IP)에 대해 15분 이내 로그인 시도가 너무 많거나, 같은 이메일로 이전 요청 후 30초 재전송 제한이 적용됩니다. 오류 메시지에 재시도 가능 시간(초)이 포함됩니다.

**코드 거부됨** — OTP가 잘못되었거나 만료되었거나, 5회 오답 잠금이 발생했습니다. `failproofai auth login`을 다시 실행하여 새 코드를 요청하세요.
