Pengesahan yang teguh adalah yang paling penting untuk mengawal akses ke aplikasi web anda. Walaupun penyedia OAuth (seperti Google atau GitHub) adalah popular, pengesahan e -mel/kata laluan tetap menjadi pilihan yang lazim dan selamat. Butiran panduan ini melaksanakan pengesahan berasaskan kelayakan dalam aplikasi Next.js menggunakan perpustakaan NextAuth.js yang kuat. Kami akan memecahkan proses langkah demi langkah untuk pelaksanaan mudah dalam projek anda sendiri.
Memahami NextAuth.js dan penyedia kelayakannya
Pembekal kelayakan NextAuth.js menyediakan:
menentukan tingkah laku pengesahan NextAuth.js. Inilah kod konfigurasi yang lengkap: NextAuthOptions
<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>
dan dbConnect
) ke persediaan khusus anda. UserModel
Atas ialah kandungan terperinci Melaksanakan Pengesahan Berasaskan Kredensial dengan NextAuth.js di Next.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!