Next.jsのアプリに10分で認証機能を追加する
こんにちは。けいすけです。
なにをするか
Clerkというツールを使って、Next.jsのアプリに10分で認証機能を追加します。
ここでやる内容は無料なので安心してください。
手順
Next.jsのアプリを作る
npx create-next-app@latest nextjs-with-clerk
コマンド実行後の回答は、今回は次の表のようにしました。
Q | A |
---|---|
Would you like to use TypeScript? | Yes |
Would you like to use ESLint? | Yes |
Would you like to use Tailwind CSS? | Yes |
Would you like to use `src/` directory? | No |
Would you like to use App Router? (recommended) | Yes |
Would you like to customize the default import alias (@/*)? | No |
@clerk/nextjs
をインストールする
cd nextjs-with-clerk
npm install @clerk/nextjs
Clerkにサインアップする
Clerkにアクセスします。
サインアップします。
"Application name"を入力し、"CREATE APPLICATION"をクリックします。
Next.jsを選び、APIキーをコピーします。
環境変数を設定する
.env.local
というファイルをルートフォルダーの中に作り、コピーした内容を貼り付けます。
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_publishable_key
CLERK_SECRET_KEY=sk_test_••••••••••••••••••••••••••••••••••
<ClerkProvider />
でアプリをラップする
import { ClerkProvider } from '@clerk/nextjs'
export const metadata = {
title: 'Next.js 13 with Clerk',
}
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<ClerkProvider>
<html lang="en">
<body>{children}</body>
</html>
</ClerkProvider>
)
}
保護するページを設定する
import { authMiddleware } from "@clerk/nextjs";
// This example protects all routes including api/trpc routes
// Please edit this to allow other routes to be public as needed.
// See https://clerk.com/docs/references/nextjs/auth-middleware for more information about configuring your middleware
export default authMiddleware({});
export const config = {
matcher: ['/((?!.+\\.[\\w]+$|_next).*)', '/', '/(api|trpc)(.*)'],
};
サインアップページを作る
import { SignUp } from "@clerk/nextjs";
export default function Page() {
return <SignUp />;
}
サインインページを作る
import { SignIn } from "@clerk/nextjs";
export default function Page() {
return <SignIn />;
}
環境変数を追加する
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_publishable_key
CLERK_SECRET_KEY=sk_test_••••••••••••••••••••••••••••••••••
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
NEXT_PUBLIC_CLERK_AFTER_SIGN_IN_URL=/
NEXT_PUBLIC_CLERK_AFTER_SIGN_UP_URL=/
<UserButton />
を置く
import { UserButton } from "@clerk/nextjs";
export default function Home() {
return (
<div>
<UserButton afterSignOutUrl="/"/>
</div>
)
}
これで完成です🎉
動作確認
npm run dev
ブラウザでhttp://localhost:3000にアクセスすると下のような画面になるので"Sign up"をクリックします。
メールアドレスとパスワードを入力して"CONTINUE"をクリックします。
入力したメールアドレス宛てに送られてきたVerification codeを入力します。
サインインすると次のような画面になります。左上に<UserButton />
というコンポーネントだけあります。
<UserButton />
をクリックすると、アカウント管理とサインアウトができます。
Clerkのダッシュボードを開くと、ユーザー数やサインアップ、サインインのログなどが見れます。
動作確認は以上です。
最後に
僕のような初心者でも躓かずに10分で作れるのを体験して欲しかったので詳細な説明は省きました。
認証で保護するページや、UIの見た目などはカスタマイズできます。詳細はドキュメントをご覧ください。
料金ですが、月間アクティブユーザー数5,000人までは無料でクレジットカードの登録も必要ないとあるので安心ですね。認証が必要なアプリケーションのプロトタイピングにはいいんじゃないんでしょうか。
読んでいただきありがとうございました🙇
Discussion