Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Figmaプラグイン(非Webページ環境)での Supabaseログイン

Figmaプラグイン(非Webページ環境)での Supabaseログイン

https://hackermeshi.com/parties/688
2025年2月5日(水) フロントエンド交流会での発表です。

Ryohei Ikegami

February 15, 2025
Tweet

More Decks by Ryohei Ikegami

Other Decks in Programming

Transcript

  1. supabase.auth.setSession const await { data, error } = supabase.auth.setSession({ access_token,

    refresh_token }) これならFigmaプラグイン内でも Supabaseのセッションを獲得できる
  2. const token = uuidv4(); .open( ); window ` /sign-in/plugin?token= `

    ${SERVER_URL} ${token} プラグインがワンタイムトークンを生成 そのトークンをクエリパラメータとして Webアプリのログイン画面を開く ワンタイムトークンの生成
  3. const await await session = supabase.auth.getSession(); prisma.onetimeLoginToken.create({ : { token,

    : user.id, : session.access_token, : session.refresh_token, }, }); // トークンとセッション情報を紐付けて保存 data userId accessToken refreshToken ユーザーがWebアプリで Supabaseを使って認証 認証成功後、ワンタイムトークンと Supabaseのセッショントークンを紐 付けてDBに保存 ワンタイムトークンは pg_cronで定期的に削除 テーブルはフロントエンドから 直アクセスできないように (RLS無効化) Webアプリでの認証
  4. プラグインでのセッション復元 const await const await await response = fetch( );

    { access_token, refresh_token } = response.json(); figma.clientStorage.setAsync( , access_token); figma.clientStorage.setAsync( , refresh_token); supabase.auth.setSession({ access_token, refresh_token }); ` /api/auth/exchange-token?token= ` "supabaseAccessToken" "supabaseRefreshToken" ${SERVER_URL} ${token} // トークンをプラグインのストレージに保存 // Supabaseセッションを復元 ユーザがープラグインに戻ったら (window.onfocusで検知) ワンタイムトークンを使って セッショントークンを取得 取得したトークンを プラグインのストレージに保存 Supabaseのセッションを復元