wanrun-develop / wanrun

0 stars 0 forks source link

fix: OAuthのDB構成 #59

Closed kkkkkkkkazuya closed 2 months ago

kkkkkkkkazuya commented 2 months ago

概要

OAuthするにあたってのDB構成について

構成

OAuthの大枠流れ

  1. フロントエンドからのリクエスト

    Google OAuth認証の手順

    • フロントエンドがGoogle OAuthの認証URL(Google提供)にリダイレクトし、ユーザーがGoogleにログイン。
    • Googleが認証を完了した後、認証コードまたはアクセストークンをフロントエンドに返す。
    • フロントエンドは、サーバーに対して以下のようなリクエストを送信
      {
      "grant_type": "OAUTH",
      "provider_name": "google",
      "provider_user_id": "google_user_id_12345",
      "token": "access_token_from_google",
      "email": "user@gmail.com"
      }
  2. バックエンドでの処理 サーバー側でこのリクエストを受け取る。

ステップ1: dog_ownersテーブルの確認または登録 サーバーは、dog_ownersテーブルに、送信されたemail(例: user@gmail.com)が既に登録されているかどうかを確認

既存ユーザー: すでにdog_ownersに登録されている場合、そのユーザーのdog_owner_idを取得 新規ユーザー: dog_ownersにemailが存在しない場合は、新規レコードを作成してユーザーを登録

-- 既存のemailを確認
SELECT dog_owner_id FROM dog_owners WHERE email = 'user@gmail.com';

-- 新規の場合はdog_ownersにレコードを追加
INSERT INTO dog_owners (name, email, reg_at, upd_at) 
VALUES ('Google User', 'user@gmail.com', current_timestamp, current_timestamp) 
RETURNING dog_owner_id;

ステップ2: auth_dog_ownersテーブルにOAuth情報を登録 auth_dog_ownersテーブルに、このユーザーのOAuth認証情報を登録grant_type = 'OAUTH'であるため、emailやphone_numberのフィールドはNULLで問題ありません。

INSERT INTO auth_dog_owners (dog_owner_id, grant_type, login_at)
VALUES (dog_owner_id_from_previous_step, 'OAUTH', current_timestamp);

ステップ3: oauth_providersテーブルにGoogle OAuth情報を登録 Google OAuthで取得したprovider_name(例: google)、provider_user_id(GoogleからのユーザーID)、token(アクセストークン)をoauth_providersテーブルに登録

INSERT INTO oauth_providers (auth_dog_owner_id, provider_name, provider_user_id, token, token_expiration, login_at)
VALUES (
  auth_dog_owner_id_from_previous_step, 
  'google', 
  'google_user_id_12345', 
  'access_token_from_google', 
  current_timestamp + interval '1 hour', 
  current_timestamp
);

関連Issue