1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【連載?? #2】バイブコーディングでサービスを作る~バックエンドとAuth0を連携する

Posted at

【連載 #1】Lovable × Auth0で login を置き換える.png

この記事は、Lovable(React)×Auth0 をつないだ前回(#1)の続編。

今回は、フロントから直接SupabaseのAPI/Edge Functionsを呼んでいた箇所を、自作バックエンドAPI(AWS Lambda+API Gateway)へ段階的に移していく試行錯誤の記録です。
目標は 「アカウント登録」フローのバックエンド移行(仕様の 見直し+最小実装+バックエンドとAuth0への疎通)。


前回の補遺(Auth0連携が即成功した話)

  • Auth0のDomainとClientID を Lovable 側に正しく渡したら、Universal Login → リダイレクト → useAuth0() でユーザー情報取得がすぐ成功。
    ※ただし、ユーザ情報取得エンドポイントはないので404。
  • 以降のAPI呼び出しでは audience 付きの Access Token を取得して Authorization: Bearer でバックエンドへ渡す方針に確定(本稿は「登録API」実装が主題)。

今日やること(ゴール)

  • 既存の Supabase依存の「アカウント登録」処理を、自作バックエンドAPI に置き換える設計を固める
  • フロント → API入出力フォーマットを定義(Auth0を前提にパスワード取り扱い方針を整理
  • AWS Lambda(TypeScript)POST /api/accounts/register を実装
  • JWT検証(Auth0のAccess Token)DBの選定方針を決める(最小はモックor簡易DB/次回以降で本格化)
  • フロント実装(Lovable/React) から 新APIを叩くgetAccessTokenSilently()

構成図(本回の到達点)

[Browser / Lovable(React)]
      │ 1) Login (Auth0)
      │ 2) getAccessTokenSilently()  ← audience 付き
      │ 3) POST /api/accounts/register (Bearer <token>)
      ▼
[API Gateway]  --(JWT検証)--> [AWS Lambda (TypeScript)] --(DB)--> [Aurora/RDS or DynamoDB(検討中)]

メモ:本稿では Lambda 内で JWT 検証まで実装。将来的には Lambda Authorizer へ分離も選択肢。


Q&Aログ(Lovableへの質問と回答)※そのまま掲載

まずは、バックエンドにどのようなAPIを作ればいいのかがわからないので、Lovableに質問します。
知りたいことは「今、フロントエンドからSupabaseに向けてどんなJSON送っているのか?」です。
早速聞いてみます。

Q: アカウント登録を行うバックエンドAPIを作成する。アカウント登録ボタンを押した際のリクエストと情報を教えて

A: 現在のアカウント登録フローを確認しました。現在はフロントエンドで直接Supabaseの認証APIを呼び出していますが、これをバックエンドAPIに移行する提案をします。

現在の登録リクエスト情報
アカウント登録ボタンを押した際に送信される情報:

// フォームから送信される基本情報
{
  "lastName": "string",
  "firstName": "string",
  "email": "string",
  "password": "string",
  "confirmPassword": "string",
  "terms": true
}

// URLパラメータから取得される招待情報
{
  "token": "string", 
  "type": "system_admin"
}

以上


Q&Aログ(Lovableへの質問と回答)※そのまま掲載

先の回答を見た感じ、結構ちゃんと出してくれそうな気がしたので思い切って既にLovable側で実装済みの全画面に対してやってもらうことにしました。

Q: 画面側とセットにしたAPI仕様書にして。機能の目的や概要なども書いて。各エンドぽいとでDBに登録して欲しい内容も。AIに食わせて実装するので。

A: 現在実装済みの画面側の機能を詳しく分析し、画面側とセットにしたAPI仕様書を作成いたします。
※出力された仕様書は省略

以上

ちょっとした誤字もなんのその。
気にせず全量を出力してくれました。

ということで、次はCodexに作業を頼みます。


Q&Aログ(Codexへの質問と回答)※そのまま掲載

最近のCodexはGPT5に進化したということで、かなり難しいタスクもこなしてくれると聞いています。
それを信じて、先ほどLovableが出した仕様書を全部そのままつっこみます。

Q: 画面情報(概要、目的)とその画面に対応するapi仕様書を送る。バックエンドのAPI側を実装して。認証については、Auth0を使用する。フロントエンドからトークンが送られてくるから、バックエンドではAuth0で検証するようにして。Serverless経由でlamdbaにデプロイするから、ファイル構成もそのようにして。.tsで作って。

A:
image.png

以上

Codexが14分も作業をして6個のエンドポイントを作ってくれました。


Codexが出したコードをCursorにインポート

とりあえずコードを何も見ないまま、Codexを信じてCursorにインポートします。
そして、次のように一切何も見ないまま打ち込みます。
すると、わかりましたと色々調べて足りないものを追加してLamdbaにアップロードしてくれました。
ついでにテスト用のURLも教えてくれました。

image.png

では、教えてくれたURLにブラウザからアクセスしてみます。

image.png

動いたっぽい!!
ここまで自分で書いたコードは、まだ0!!

次回予告

  • バックエンド側でトークンの検証を実施できるようにします。

まとめ(今日の到達点)

  • アカウント登録のフローを Auth0前提で再設計し、Lambda(TypeScript)最小の/api/accounts/register を実装
  • Edge Functionは作らず自作バックエンドへ集約する方針に一本化
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?