タスク内容
• devise_token_auth を使用したログインに関する実装
1. どこをテストするか
- 対象:
- POST /api/v1/auth/sign_in(ログイン)
- DELETE /api/v1/auth/sign_out(ログアウト)
- GET /api/v1/auth/validate_token(トークン検証)
- 前提:
- 認証は Devise Token Auth を使用している
2. 何を期待するか
- status:
- sign_in(ログイン)
- sign_out(ログアウト)
- validate_token(トークン検証)
- レスポンス本文で見るもの:
- sign_in(ログイン成功)
- data に email / name が含まれる
- レスポンスヘッダーに access-token / client / uid が含まれる
- sign_in(ログイン失敗)
- success が false である
- errors にログイン失敗理由が含まれる(Invalid login credentials…)
- sign_out(ログアウト成功)
- validate_token(トークン検証成功)
3. 前提準備
- テスト用ユーザーをDBに作成する(let!(:user))
- 理由:ログインは「すでにDBに存在するユーザー」に対して行う処理のため
- let! を使って、テスト開始前にユーザー作成を確定させる
- 理由:let は呼ばれたときに初めて作成されるため
- もし user が参照されない流れのテストだと、ユーザーが作成されずにログインが成立しない可能性がある
- sign_out / validate_token のテストでは、先に sign_in してトークンを取得する
- 理由:ログイン後にレスポンスヘッダーで返ってくるトークン(access-token / client / uid)を使って
- 「ログイン状態として扱えるリクエスト」を再現するため
4. リクエスト送信
- POST /api/v1/auth/sign_in
- params(送るデータ)に email / password を入れて送る
- 理由:まだログイン前なので、「ログイン材料(認証情報)」をサーバーに渡して判定してもらうため
- DELETE /api/v1/auth/sign_out
- headers に access-token / client / uid を付けて送る
- 理由:このリクエストが「誰のログアウト」かをトークンで特定するため(ログイン済みの証明が必要)
- GET /api/v1/auth/validate_token
- headers に access-token / client / uid を付けて送る
- 理由:送ったトークンが有効か(期限切れ/不正でないか)をサーバー側で判定するため