Agent Skills by ALSEL
Anthropic Claudeソフトウェア開発⭐ リポ 0品質スコア 50/100

nextjs-supabase-auth

Next.jsのApp RouterとSupabase Authを高度に統合するスキルです。認証フローの設計からセッション管理、ミドルウェア設定まで、実践的な実装をサポートします。

description の原文を見る

Expert integration of Supabase Auth with Next.js App Router

SKILL.md 本文

Next.js + Supabase Auth

Next.js App Router に対する Supabase Auth のエキスパート統合

Capabilities

  • nextjs-auth
  • supabase-auth-nextjs
  • auth-middleware
  • auth-callback

Prerequisites

  • 必須スキル: nextjs-app-router, supabase-backend

Patterns

Supabase クライアントセットアップ

異なるコンテキスト用に適切に設定された Supabase クライアントを作成します

使用時期: Next.js プロジェクトで認証を設定する場合

// lib/supabase/client.ts (ブラウザクライアント)
'use client'
import { createBrowserClient } from '@supabase/ssr'

export function createClient() {
  return createBrowserClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
  )
}

// lib/supabase/server.ts (サーバークライアント)
import { createServerClient } from '@supabase/ssr'
import { cookies } from 'next/headers'

export async function createClient() {
  const cookieStore = await cookies()
  return createServerClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
    {
      cookies: {
        getAll() {
          return cookieStore.getAll()
        },
        setAll(cookiesToSet) {
          cookiesToSet.forEach(({ name, value, options }) => {
            cookieStore.set(name, value, options)
          })
        },
      },
    }
  )
}

認証ミドルウェア

ルートを保護し、ミドルウェアでセッションをリフレッシュします

使用時期: ルート保護またはセッションリフレッシュが必要な場合

// middleware.ts
import { createServerClient } from '@supabase/ssr'
import { NextResponse, type NextRequest } from 'next/server'

export async function middleware(request: NextRequest) {
  let response = NextResponse.next({ request })

  const supabase = createServerClient(
    process.env.NEXT_PUBLIC_SUPABASE_URL!,
    process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
    {
      cookies: {
        getAll() {
          return request.cookies.getAll()
        },
        setAll(cookiesToSet) {
          cookiesToSet.forEach(({ name, value, options }) => {
            response.cookies.set(name, value, options)
          })
        },
      },
    }
  )

  // セッションが期限切れの場合はリフレッシュ
  const { data: { user } } = await supabase.auth.getUser()

  // ダッシュボードルートを保護
  if (request.nextUrl.pathname.startsWith('/dashboard') && !user) {
    return NextResponse.redirect(new URL('/login', request.url))
  }

  return response
}

export const config = {
  matcher: ['/((?!_next/static|_next/image|favicon.ico).*)'],
}

認証コールバックルート

OAuth コールバックを処理し、コードをセッションと交換します

使用時期: OAuth プロバイダー (Google、GitHub など) を使用する場合

// app/auth/callback/route.ts
import { createClient } from '@/lib/supabase/server'
import { NextResponse } from 'next/server'

export async function GET(request: Request) {
  const { searchParams, origin } = new URL(request.url)
  const code = searchParams.get('code')
  const next = searchParams.get('next') ?? '/'

  if (code) {
    const supabase = await createClient()
    const { error } = await supabase.auth.exchangeCodeForSession(code)
    if (!error) {
      return NextResponse.redirect(`${origin}${next}`)
    }
  }

  return NextResponse.redirect(`${origin}/auth/error`)
}

サーバーアクション認証

Server Actions で認証操作を処理します

使用時期: Server Components からログイン、ログアウト、またはサインアップを行う場合

// app/actions/auth.ts
'use server'
import { createClient } from '@/lib/supabase/server'
import { redirect } from 'next/navigation'
import { revalidatePath } from 'next/cache'

export async function signIn(formData: FormData) {
  const supabase = await createClient()
  const { error } = await supabase.auth.signInWithPassword({
    email: formData.get('email') as string,
    password: formData.get('password') as string,
  })

  if (error) {
    return { error: error.message }
  }

  revalidatePath('/', 'layout')
  redirect('/dashboard')
}

export async function signOut() {
  const supabase = await createClient()
  await supabase.auth.signOut()
  revalidatePath('/', 'layout')
  redirect('/')
}

サーバーコンポーネントでユーザー情報を取得

Server Components で認証済みユーザーにアクセスします

使用時期: ユーザー固有のコンテンツをサーバー側でレンダリングする場合

// app/dashboard/page.tsx
import { createClient } from '@/lib/supabase/server'
import { redirect } from 'next/navigation'

export default async function DashboardPage() {
  const supabase = await createClient()
  const { data: { user } } = await supabase.auth.getUser()

  if (!user) {
    redirect('/login')
  }

  return (
    <div>
      <h1>Welcome, {user.email}</h1>
    </div>
  )
}

Validation Checks

getSession() を使用した認証チェック

重大度: ERROR

メッセージ: getSession() は JWT を検証しません。セキュリティ重要なチェックには getUser() を使用してください。

修正アクション: セキュリティ重要なチェックで getSession() を getUser() に置き換えてください

コールバックルートなしの OAuth

重大度: ERROR

メッセージ: OAuth を使用していますが、app/auth/callback/route.ts にコールバックルートがありません

修正アクション: OAuth リダイレクトを処理するために app/auth/callback/route.ts を作成してください

サーバーコンテキストでのブラウザクライアント

重大度: ERROR

メッセージ: サーバーコンテキストでブラウザクライアントが使用されています。代わりに createServerClient を使用してください。

修正アクション: @supabase/ssr から createServerClient をインポートして使用してください

ミドルウェアなしの保護ルート

重大度: WARNING

メッセージ: middleware.ts が見つかりません。ルート保護用にミドルウェアの追加を検討してください。

修正アクション: middleware.ts を作成してルートを保護し、セッションをリフレッシュしてください

ハードコードされた認証リダイレクト URL

重大度: WARNING

メッセージ: localhost リダイレクトがハードコードされています。環境の柔軟性を高めるために origin を使用してください。

修正アクション: window.location.origin または process.env.NEXT_PUBLIC_SITE_URL を使用してください

エラーハンドリングなしの認証呼び出し

重大度: WARNING

メッセージ: エラーハンドリングなしの認証操作です。常にエラーをチェックしてください。

修正アクション: { data, error } を分割代入して、エラーケースを処理してください

再検証なしの認証アクション

重大度: WARNING

メッセージ: 認証アクションに revalidatePath がありません。キャッシュが古い認証状態を表示する可能性があります。

修正アクション: 認証操作後に revalidatePath('/', 'layout') を追加してください

クライアント側のみのルート保護

重大度: WARNING

メッセージ: クライアント側のルート保護ではコンテンツがちらつきます。middleware を使用してください。

修正アクション: 保護を middleware.ts に移動してより良い UX を実現してください

Collaboration

委譲トリガー

  • database|rls|queries|tables -> supabase-backend (認証がデータベースレイヤーを必要とする)
  • route|page|component|layout -> nextjs-app-router (認証が Next.js パターンを必要とする)
  • deploy|production|vercel -> vercel-deployment (認証がデプロイ設定を必要とする)
  • ui|form|button|design -> frontend (認証が UI コンポーネントを必要とする)

完全な認証スタック

スキル: nextjs-supabase-auth, supabase-backend, nextjs-app-router, vercel-deployment

ワークフロー:

1. データベースセットアップ (supabase-backend)
2. 認証実装 (nextjs-supabase-auth)
3. ルート保護 (nextjs-app-router)
4. デプロイ設定 (vercel-deployment)

保護された SaaS

スキル: nextjs-supabase-auth, stripe-integration, supabase-backend

ワークフロー:

1. ユーザー認証 (nextjs-supabase-auth)
2. カスタマー同期 (stripe-integration)
3. サブスクリプションゲート (supabase-backend)

Related Skills

相性の良いスキル: nextjs-app-router, supabase-backend

When to Use

  • ユーザーが言及または暗示: supabase auth next
  • ユーザーが言及または暗示: authentication next.js
  • ユーザーが言及または暗示: login supabase
  • ユーザーが言及または暗示: auth middleware
  • ユーザーが言及または暗示: protected route
  • ユーザーが言及または暗示: auth callback
  • ユーザーが言及または暗示: session management

Limitations

  • 上記で説明されているスコープが明確に一致する場合にのみ、このスキルを使用してください。
  • 出力を環境固有の検証、テスト、またはエキスパートレビューの代替として扱わないでください。
  • 必要な入力、許可、安全境界、または成功基準が不足している場合は、停止して説明を求めてください。

ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ

詳細情報

作者
sickn33
リポジトリ
sickn33/antigravity-awesome-skills
ライセンス
MIT
最終更新
不明

Source: https://github.com/sickn33/antigravity-awesome-skills / ライセンス: MIT

関連スキル

汎用ソフトウェア開発⭐ リポ 39,967

doubt-driven-development

重要な判断はすべて、本番環境への展開前に新しい視点から対抗的レビューを実施します。速度より正確性が重要な場合、不慣れなコードを扱う場合、本番環境・セキュリティに関わるロジック・取り消し不可の操作など影響度が高い場合、または後でバグを修正するよりも今検証する方が効率的な場合に活用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 1,175

apprun-skills

TypeScriptを使用したAppRunアプリケーションのMVU設計に関する総合的なガイダンスが得られます。コンポーネントパターン、イベントハンドリング、状態管理(非同期ジェネレータを含む)、パラメータと保護機能を備えたルーティング・ナビゲーション、vistestを使用したテストに対応しています。AppRunコンポーネントの設計・レビュー、ルートの配線、状態フローの管理、AppRunテストの作成時に活用してください。

by yysun
OpenAIソフトウェア開発⭐ リポ 797

desloppify

コードベースのヘルスチェックと技術負債の追跡ツールです。コード品質、技術負債、デッドコード、大規模ファイル、ゴッドクラス、重複関数、コードスメル、命名規則の問題、インポートサイクル、結合度の問題についてユーザーが質問した場合に使用してください。また、ヘルススコアの確認、次の改善項目の提案、クリーンアップ計画の作成をリクエストされた際にも対応します。29言語に対応しています。

by Git-on-my-level
汎用ソフトウェア開発⭐ リポ 39,967

debugging-and-error-recovery

テストが失敗したり、ビルドが壊れたり、動作が期待と異なったり、予期しないエラーが発生したりした場合に、体系的な根本原因デバッグをガイドします。推測ではなく、根本原因を見つけて修正するための体系的なアプローチが必要な場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

test-driven-development

テスト駆動開発により実装を進めます。ロジックの実装、バグの修正、動作の変更など、あらゆる場面で活用できます。コードが正常に動作することを証明する必要がある場合、バグ報告を受けた場合、既存機能を修正する予定がある場合に使用してください。

by addyosmani
汎用ソフトウェア開発⭐ リポ 39,967

incremental-implementation

変更を段階的に実施します。複数のファイルに影響する機能や変更を実装する場合に使用してください。大量のコードを一度に書こうとしている場合や、タスクが一度では完結できないほど大きい場合に活用します。

by addyosmani
本サイトは GitHub 上で公開されているオープンソースの SKILL.md ファイルをクロール・インデックス化したものです。 各スキルの著作権は原作者に帰属します。掲載に問題がある場合は info@alsel.co.jp または /takedown フォームよりご連絡ください。
原作者: sickn33 · sickn33/antigravity-awesome-skills · ライセンス: MIT