認証・セッション管理¶
認証方式¶
smooth は JWT(JSON Web Token)ベースの認証を採用しています。
| トークン | 保存場所 | 有効期限 |
|---|---|---|
| アクセストークン | HTTP-only Cookie | 短期間(数分〜数時間) |
| リフレッシュトークン | HTTP-only Cookie | 長期間(数日〜数週間) |
アクセストークンが期限切れになると、リフレッシュトークンを使って自動更新されます。
ログイン方法¶
メール + パスワード¶
LINE LIFF(smooth-mobile の主要ログイン)¶
smooth-mobile では LINE LIFF(LINE Front-end Framework) をデフォルトの認証方式として採用しています。
sequenceDiagram
participant User as ユーザー
participant App as smooth-mobile
participant LINE as LINE Platform
participant API as バックエンド
User->>App: LINEログインボタンをクリック
App->>LINE: LIFF SDK で認証開始
User->>LINE: LINEアカウントで認証
LINE-->>App: LINE アクセストークン
App->>API: LINE トークンを送信
API->>LINE: トークン検証・ユーザー情報取得
API-->>App: JWT を Cookie に保存
Google / Apple(ソーシャルログイン)¶
smooth-owner および smooth-mobile(オプション)では Firebase Authentication 経由でソーシャルログインをサポートしています。Firebase SDK がOAuth処理を担い、取得した Firebase ID トークンをバックエンドに送信します。
sequenceDiagram
participant User as ユーザー
participant App as smooth-owner
participant Firebase as Firebase Authentication
participant API as バックエンド
User->>App: Googleログインボタンをクリック
App->>Firebase: Firebase SDK で OAuth 開始
User->>Firebase: Googleアカウントで認証
Firebase-->>App: Firebase ID トークン
App->>API: Firebase ID トークンを送信
API->>Firebase: トークン検証(firebase_auth_service)
Firebase-->>API: ユーザー情報(メール・プロバイダー等)
API->>API: ユーザー作成 or 既存ユーザー特定
API-->>App: JWT を Cookie に保存
注意: AWS Cognito Hosted UI は現在廃止されています。コードベースにレガシーとして残存していますが、本番環境では使用されていません。
セッション管理¶
複数デバイスからのログインに対応しており、user_sessions テーブルでデバイス単位のセッションを管理します。
| エンドポイント | 説明 |
|---|---|
GET /auth/sessions |
ログイン中のデバイス一覧 |
GET /auth/sessions/{id} |
セッション詳細 |
POST /auth/sessions/logout-all |
全デバイスからログアウト |
パスワード管理¶
| エンドポイント | 説明 |
|---|---|
POST /auth/forgot-password |
パスワードリセットメールを送信 |
POST /auth/reset-password |
パスワードリセット(メールのリンクから) |
POST /auth/change-password |
パスワード変更(ログイン済み) |