GitHub OAuth
OAuth App vs GitHub App
| 項目 | OAuth App (このプロジェクト) | GitHub App |
|---|---|---|
| トークン有効期限 | 無期限 | 8時間 |
| リフレッシュトークン | なし | あり |
| 無効化条件 | ユーザー取り消し/App削除/revoke API | 期限切れ/取り消し |
認証フロー
1. ユーザー → GitHub認証ページにリダイレクト
2. GitHub → コールバックURLに `?code=xxx` 付きでリダイレクト
3. `code` をアクセストークンに交換(exchange_code_for_token)
4. セッションをFirestoreに保存、session_idをCookieに設定(7日間有効)
5. 次回アクセス時: Cookieからsession_id取得 → Firestoreからセッション復元
セッション永続化
| 保存先 | 内容 | 有効期限 |
|---|---|---|
| Cookie | session_id (UUID) | 7日間 |
Firestore sessions |
user_id, access_token, user_data, last_accessed_at | 7日間(last_accessed_at基準) |
Cookie取得のretry
CookieManagerは非同期で動作するため、初回呼び出しでNoneが返る可能性あり。
get_session_cookie()で最大3回retryし、取得できなければ未ログインとして扱う。
Key Files
| File | Purpose |
|---|---|
services/auth.py |
OAuth認証、トークン交換、セッション復元・永続化 |
services/session.py |
Firestore/Cookieセッション管理 |
トークン無効化条件
- ユーザーがGitHub設定からアプリのアクセスを取り消し
- OAuth App自体が削除された
DELETE /applications/{client_id}/tokenで明示的に無効化- 7日間アクセスなし → Firestoreセッション削除
Converted and distributed by TomeVault — claim your Tome and manage your conversions.