nextauth.jsおよびnext.jsを使用してユーザーアクセスを安全に管理する:資格情報ベースの認証ガイド
堅牢な認証は、Webアプリケーションへのアクセスを制御するための最重要策です。 OAUTHプロバイダー(GoogleやGitHubなど)は人気がありますが、電子メール/パスワード認証は一般的で安全な選択のままです。このガイドの詳細は、強力なnextauth.jsライブラリを使用して、next.jsアプリケーション内で資格ベースの認証を実装しています。 あなた自身のプロジェクトで簡単に実装するために、プロセスを段階的に分類します。
nextauth.jsとその資格プロバイダーnextauth.js資格プロバイダーが提供しています:
NextAuthOptions
nextauth.jsの認証メカニズムとインターフェイスするには、APIルートが必要です。
<code class="language-javascript">import { NextAuthOptions } from "next-auth"; import CredentialProvider from "next-auth/providers/credentials"; import bcrypt from "bcryptjs"; import { dbConnect } from "@/lib/dbConnect"; import UserModel from "@/model/User"; export const authOptions: NextAuthOptions = { providers: [ CredentialProvider({ id: "credentials", name: "Credentials", credentials: { email: { label: "Email", type: "text" }, password: { label: "Password", type: "password" }, }, async authorize(credentials: any): Promise<any> { await dbConnect(); try { const user = await UserModel.findOne({ $or: [ { email: credentials.identifier }, { username: credentials.identifier }, ], }); if (!user) { throw new Error("Invalid email or username"); } if (!user.isVerified) { throw new Error("Please verify your account."); } const isPasswordCorrect = await bcrypt.compare(credentials.password, user.password); if (isPasswordCorrect) { return user; } else { throw new Error("Incorrect password."); } } catch (err: any) { throw new Error(err.message); //Improved error handling } }, }), ], callbacks: { async jwt({ token, user }) { if (user) { token._id = user._id?.toString(); token.isVerified = user?.isVerified; token.username = user?.username; token.isAcceptingMessages = user?.isAcceptingMessages; } return token; }, async session({ session, token }) { if (token) { session.user._id = token._id?.toString(); session.user.isVerified = token?.isVerified; session.user.username = token?.username; session.user.isAcceptingMessages = token?.isAcceptingMessages; } return session; }, }, pages: { signIn: "/sign-in", error: "/sign-in", }, session: { strategy: "jwt", }, secret: process.env.NEXTAUTH_SECRET, };</code>
よく組織化されたプロジェクト構造を維持します:
<code class="language-javascript">// app/api/auth/[...nextauth]/route.ts import NextAuth from "next-auth"; import { authOptions } from "@/lib/authOptions"; const handler = NextAuth(authOptions); export { handler as GET, handler as POST };</code>
結論
<code>/lib /authOptions.ts /model /User.ts /app /api /auth /[...nextauth]/route.ts</code>
以上がnext.jsでnextauth.jsを使用して資格ベースの認証を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。