diff --git a/pages/api/auth/[...nextauth].js b/pages/api/auth/[...nextauth].js index 1694761..2274de6 100644 --- a/pages/api/auth/[...nextauth].js +++ b/pages/api/auth/[...nextauth].js @@ -1,52 +1,57 @@ import NextAuth from "next-auth" import CredentialsProvider from "next-auth/providers/credentials" -import { PrismaAdapter } from "@next-auth/prisma-adapter" import { PrismaClient } from "@prisma/client" import bcrypt from "bcryptjs" const prisma = new PrismaClient() export default NextAuth({ - adapter: PrismaAdapter(prisma), - trustHost: true, providers: [ CredentialsProvider({ name: "Credentials", credentials: { - username: { label: "Username", type: "text", placeholder: "seu_usuario" }, + username: { label: "Username", type: "text" }, password: { label: "Password", type: "password" } }, async authorize(credentials) { if (!credentials?.username || !credentials?.password) return null - const user = await prisma.user.findUnique({ where: { username: credentials.username } }) - - if (user && user.password) { - const isValid = await bcrypt.compare(credentials.password, user.password) - if (isValid) { - return { - id: user.id, - email: user.email, - name: user.name || user.username, - username: user.username - } - } + if (!user) return null + const isValid = await bcrypt.compare(credentials.password, user.password) + if (!isValid) return null + return { + id: user.id, + username: user.username, + email: user.email, + name: user.name, + // optional: role, image, etc. } - return null } }) ], secret: process.env.NEXTAUTH_SECRET, - session: { strategy: "jwt" }, - pages: { - signIn: "/signin", + session: { + strategy: "jwt", + maxAge: 30 * 24 * 60 * 60 // 30 days }, callbacks: { - async session({ session, token, user }) { - if (session.user) { - session.user.id = token.sub + async jwt({ token, user }) { + if (user) { + token.id = user.id + token.username = user.username + token.email = user.email + token.name = user.name + } + return token + }, + async session({ session, token }) { + if (token) { + session.user.id = token.id + session.user.username = token.username + session.user.email = token.email + session.user.name = token.name } return session } diff --git a/pages/signup.jsx b/pages/signup.jsx index da831a3..9dd4327 100644 --- a/pages/signup.jsx +++ b/pages/signup.jsx @@ -12,28 +12,26 @@ export default function SignUp() { const handleSubmit = async (e) => { e.preventDefault() setError("") - - if (password !== confirmPassword) { - setError("Senhas não coincidem") - return - } - - if (password.length < 6) { - setError("Senha deve ter pelo menos 6 caracteres") - return - } - setLoading(true) - try { - const res = await fetch("/api/auth/signup", { + if (password !== confirmPassword) { + setError("Senhas não coincidem") + return + } + + if (password.length < 6) { + setError("Senha deve ter pelo menos 6 caracteres") + return + } + + const res = await fetch("/api/auth/register", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ username, password }) }) - + const data = await res.json() - + if (res.ok) { router.push("/signin") } else { @@ -52,7 +50,7 @@ export default function SignUp() {