Download src/lib/auth.ts from Jessedbrown/ipa-activity-generator-ptbr: direct link, hf CLI and curl.
- Browser
- Download file 2.64 kB
-
https://huggingface.co/Jessedbrown/ipa-activity-generator-ptbr/resolve/main/src/lib/auth.ts
- Command line
-
hf download hf://Jessedbrown/ipa-activity-generator-ptbr/src/lib/auth.ts
-
curl -L -o auth.ts https://huggingface.co/Jessedbrown/ipa-activity-generator-ptbr/resolve/main/src/lib/auth.ts
2.64 kB
| import type { NextAuthConfig } from "next-auth"; | |
| import NextAuth from "next-auth"; | |
| import Credentials from "next-auth/providers/credentials"; | |
| import { PrismaAdapter } from "@auth/prisma-adapter"; | |
| import bcrypt from "bcryptjs"; | |
| import { Role } from "@prisma/client"; | |
| import prisma from "@/lib/db"; | |
| export const authOptions = { | |
| adapter: PrismaAdapter(prisma), | |
| session: { strategy: "jwt" }, | |
| pages: { signIn: "/login" }, | |
| providers: [ | |
| Credentials({ | |
| name: "Credenciais", | |
| credentials: { | |
| email: { label: "E-mail", type: "email" }, | |
| password: { label: "Senha", type: "password" }, | |
| }, | |
| async authorize(credentials) { | |
| if (!credentials?.email || !credentials?.password) { | |
| return null; | |
| } | |
| const user = await prisma.user.findUnique({ | |
| where: { email: credentials.email }, | |
| }); | |
| if (!user) { | |
| return null; | |
| } | |
| const passwordMatch = await bcrypt.compare( | |
| credentials.password, | |
| user.passwordHash | |
| ); | |
| if (!passwordMatch) { | |
| return null; | |
| } | |
| const membership = await prisma.membership.findFirst({ | |
| where: { userId: user.id }, | |
| orderBy: { createdAt: "asc" }, | |
| }); | |
| return { | |
| id: user.id, | |
| email: user.email, | |
| orgId: membership?.orgId ?? null, | |
| role: membership?.role ?? null, | |
| } satisfies { | |
| id: string; | |
| email: string; | |
| orgId: string | null; | |
| role: Role | null; | |
| }; | |
| }, | |
| }), | |
| ], | |
| callbacks: { | |
| async jwt({ token, user }) { | |
| if (user) { | |
| token.userId = user.id; | |
| token.orgId = (user as { orgId?: string | null }).orgId ?? null; | |
| token.role = (user as { role?: Role | null }).role ?? null; | |
| } | |
| if (token.userId && (!token.orgId || !token.role)) { | |
| const membership = await prisma.membership.findFirst({ | |
| where: { userId: token.userId as string }, | |
| orderBy: { createdAt: "asc" }, | |
| }); | |
| token.orgId = membership?.orgId ?? null; | |
| token.role = membership?.role ?? null; | |
| } | |
| return token; | |
| }, | |
| async session({ session, token }) { | |
| if (session.user) { | |
| session.user.id = token.userId as string; | |
| session.user.orgId = (token.orgId as string | null) ?? null; | |
| session.user.role = (token.role as Role | null) ?? null; | |
| } | |
| return session; | |
| }, | |
| }, | |
| secret: process.env.AUTH_SECRET, | |
| trustHost: true, | |
| } satisfies NextAuthConfig; | |
| export const { handlers, auth, signIn, signOut } = NextAuth(authOptions); | |