mirror of
https://github.com/SrIzan10/next-auth.git
synced 2026-05-01 10:55:20 +00:00
221 lines
7.5 KiB
TypeScript
221 lines
7.5 KiB
TypeScript
import NextAuth, { type NextAuthOptions } from "next-auth"
|
|
// import { NextRequest } from "next/server"
|
|
|
|
// Providers
|
|
import Apple from "next-auth/providers/apple"
|
|
import Auth0 from "next-auth/providers/auth0"
|
|
import AzureAD from "next-auth/providers/azure-ad"
|
|
import AzureB2C from "next-auth/providers/azure-ad-b2c"
|
|
import BoxyHQSAML from "next-auth/providers/boxyhq-saml"
|
|
// import Cognito from "next-auth/providers/cognito"
|
|
import Credentials from "next-auth/providers/credentials"
|
|
import Discord from "next-auth/providers/discord"
|
|
import DuendeIDS6 from "next-auth/providers/duende-identity-server6"
|
|
// import Email from "next-auth/providers/email"
|
|
import Facebook from "next-auth/providers/facebook"
|
|
import Foursquare from "next-auth/providers/foursquare"
|
|
import Freshbooks from "next-auth/providers/freshbooks"
|
|
import GitHub from "next-auth/providers/github"
|
|
import Gitlab from "next-auth/providers/gitlab"
|
|
import Google from "next-auth/providers/google"
|
|
// import IDS4 from "next-auth/providers/identity-server4"
|
|
import Instagram from "next-auth/providers/instagram"
|
|
// import Keycloak from "next-auth/providers/keycloak"
|
|
import Line from "next-auth/providers/line"
|
|
import LinkedIn from "next-auth/providers/linkedin"
|
|
import Mailchimp from "next-auth/providers/mailchimp"
|
|
// import Okta from "next-auth/providers/okta"
|
|
import Osu from "next-auth/providers/osu"
|
|
import Patreon from "next-auth/providers/patreon"
|
|
import Slack from "next-auth/providers/slack"
|
|
import Spotify from "next-auth/providers/spotify"
|
|
import Trakt from "next-auth/providers/trakt"
|
|
import Twitch from "next-auth/providers/twitch"
|
|
import Twitter from "next-auth/providers/twitter"
|
|
import Vk from "next-auth/providers/vk"
|
|
import Wikimedia from "next-auth/providers/wikimedia"
|
|
import WorkOS from "next-auth/providers/workos"
|
|
|
|
// // Prisma
|
|
// import { PrismaClient } from "@prisma/client"
|
|
// import { PrismaAdapter } from "@next-auth/prisma-adapter"
|
|
// const client = globalThis.prisma || new PrismaClient()
|
|
// if (process.env.NODE_ENV !== "production") globalThis.prisma = client
|
|
// const adapter = PrismaAdapter(client)
|
|
|
|
// // Fauna
|
|
// import { Client as FaunaClient } from "faunadb"
|
|
// import { FaunaAdapter } from "@next-auth/fauna-adapter"
|
|
// const opts = { secret: process.env.FAUNA_SECRET, domain: process.env.FAUNA_DOMAIN }
|
|
// const client = globalThis.fauna || new FaunaClient(opts)
|
|
// if (process.env.NODE_ENV !== "production") globalThis.fauna = client
|
|
// const adapter = FaunaAdapter(client)
|
|
|
|
// // TypeORM
|
|
// import { TypeORMLegacyAdapter } from "@next-auth/typeorm-legacy-adapter"
|
|
// const adapter = TypeORMLegacyAdapter({
|
|
// type: "sqlite",
|
|
// name: "next-auth-test-memory",
|
|
// database: "./typeorm/dev.db",
|
|
// synchronize: true,
|
|
// })
|
|
|
|
// // Supabase
|
|
// import { SupabaseAdapter } from "@next-auth/supabase-adapter"
|
|
// const adapter = SupabaseAdapter({
|
|
// url: process.env.NEXT_PUBLIC_SUPABASE_URL,
|
|
// secret: process.env.SUPABASE_SERVICE_ROLE_KEY,
|
|
// })
|
|
|
|
export const authOptions: NextAuthOptions = {
|
|
// adapter,
|
|
// debug: process.env.NODE_ENV !== "production",
|
|
theme: {
|
|
logo: "https://next-auth.js.org/img/logo/logo-sm.png",
|
|
brandColor: "#1786fb",
|
|
},
|
|
providers: [
|
|
Credentials({
|
|
credentials: { password: { label: "Password", type: "password" } },
|
|
async authorize(credentials) {
|
|
if (credentials.password !== "pw") return null
|
|
return {
|
|
name: "Fill Murray",
|
|
email: "bill@fillmurray.com",
|
|
image: "https://www.fillmurray.com/64/64",
|
|
id: "1",
|
|
foo: "",
|
|
}
|
|
},
|
|
}),
|
|
Apple({
|
|
clientId: process.env.APPLE_ID,
|
|
clientSecret: process.env.APPLE_SECRET,
|
|
}),
|
|
Auth0({
|
|
clientId: process.env.AUTH0_ID,
|
|
clientSecret: process.env.AUTH0_SECRET,
|
|
issuer: process.env.AUTH0_ISSUER,
|
|
}),
|
|
AzureAD({
|
|
clientId: process.env.AZURE_AD_CLIENT_ID,
|
|
clientSecret: process.env.AZURE_AD_CLIENT_SECRET,
|
|
tenantId: process.env.AZURE_AD_TENANT_ID,
|
|
}),
|
|
AzureB2C({
|
|
clientId: process.env.AZURE_B2C_ID,
|
|
clientSecret: process.env.AZURE_B2C_SECRET,
|
|
issuer: process.env.AZURE_B2C_ISSUER,
|
|
}),
|
|
BoxyHQSAML({
|
|
issuer: "https://jackson-demo.boxyhq.com",
|
|
clientId: "tenant=boxyhq.com&product=saml-demo.boxyhq.com",
|
|
clientSecret: "dummy",
|
|
}),
|
|
// Cognito({ clientId: process.env.COGNITO_ID, clientSecret: process.env.COGNITO_SECRET, issuer: process.env.COGNITO_ISSUER }),
|
|
Discord({
|
|
clientId: process.env.DISCORD_ID,
|
|
clientSecret: process.env.DISCORD_SECRET,
|
|
}),
|
|
DuendeIDS6({
|
|
clientId: "interactive.confidential",
|
|
clientSecret: "secret",
|
|
issuer: "https://demo.duendesoftware.com",
|
|
}),
|
|
Facebook({
|
|
clientId: process.env.FACEBOOK_ID,
|
|
clientSecret: process.env.FACEBOOK_SECRET,
|
|
}),
|
|
Foursquare({
|
|
clientId: process.env.FOURSQUARE_ID,
|
|
clientSecret: process.env.FOURSQUARE_SECRET,
|
|
}),
|
|
Freshbooks({
|
|
clientId: process.env.FRESHBOOKS_ID,
|
|
clientSecret: process.env.FRESHBOOKS_SECRET,
|
|
}),
|
|
GitHub({
|
|
clientId: process.env.GITHUB_ID,
|
|
clientSecret: process.env.GITHUB_SECRET,
|
|
}),
|
|
Gitlab({
|
|
clientId: process.env.GITLAB_ID,
|
|
clientSecret: process.env.GITLAB_SECRET,
|
|
}),
|
|
Google({
|
|
clientId: process.env.GOOGLE_ID,
|
|
clientSecret: process.env.GOOGLE_SECRET,
|
|
}),
|
|
// IDS4({ clientId: process.env.IDS4_ID, clientSecret: process.env.IDS4_SECRET, issuer: process.env.IDS4_ISSUER }),
|
|
Instagram({
|
|
clientId: process.env.INSTAGRAM_ID,
|
|
clientSecret: process.env.INSTAGRAM_SECRET,
|
|
}),
|
|
// Keycloak({ clientId: process.env.KEYCLOAK_ID, clientSecret: process.env.KEYCLOAK_SECRET, issuer: process.env.KEYCLOAK_ISSUER }),
|
|
Line({
|
|
clientId: process.env.LINE_ID,
|
|
clientSecret: process.env.LINE_SECRET,
|
|
}),
|
|
LinkedIn({
|
|
clientId: process.env.LINKEDIN_ID,
|
|
clientSecret: process.env.LINKEDIN_SECRET,
|
|
}),
|
|
Mailchimp({
|
|
clientId: process.env.MAILCHIMP_ID,
|
|
clientSecret: process.env.MAILCHIMP_SECRET,
|
|
}),
|
|
// Okta({ clientId: process.env.OKTA_ID, clientSecret: process.env.OKTA_SECRET, issuer: process.env.OKTA_ISSUER }),
|
|
Osu({
|
|
clientId: process.env.OSU_CLIENT_ID,
|
|
clientSecret: process.env.OSU_CLIENT_SECRET,
|
|
}),
|
|
Patreon({
|
|
clientId: process.env.PATREON_ID,
|
|
clientSecret: process.env.PATREON_SECRET,
|
|
}),
|
|
Slack({
|
|
clientId: process.env.SLACK_ID,
|
|
clientSecret: process.env.SLACK_SECRET,
|
|
}),
|
|
Spotify({
|
|
clientId: process.env.SPOTIFY_ID,
|
|
clientSecret: process.env.SPOTIFY_SECRET,
|
|
}),
|
|
Trakt({
|
|
clientId: process.env.TRAKT_ID,
|
|
clientSecret: process.env.TRAKT_SECRET,
|
|
}),
|
|
Twitch({
|
|
clientId: process.env.TWITCH_ID,
|
|
clientSecret: process.env.TWITCH_SECRET,
|
|
}),
|
|
Twitter({
|
|
clientId: process.env.TWITTER_ID,
|
|
clientSecret: process.env.TWITTER_SECRET,
|
|
}),
|
|
// TwitterLegacy({ clientId: process.env.TWITTER_LEGACY_ID, clientSecret: process.env.TWITTER_LEGACY_SECRET }),
|
|
Vk({ clientId: process.env.VK_ID, clientSecret: process.env.VK_SECRET }),
|
|
Wikimedia({
|
|
clientId: process.env.WIKIMEDIA_ID,
|
|
clientSecret: process.env.WIKIMEDIA_SECRET,
|
|
}),
|
|
WorkOS({
|
|
clientId: process.env.WORKOS_ID,
|
|
clientSecret: process.env.WORKOS_SECRET,
|
|
}),
|
|
],
|
|
}
|
|
|
|
/**
|
|
* Advanced Initialization - route handler
|
|
*/
|
|
// const handler = async (
|
|
// req: NextRequest,
|
|
// routeContext: { params: { nextauth: string[] } }
|
|
// ): Promise<any> => {
|
|
// return NextAuth(req, routeContext, authOptions)
|
|
// }
|
|
|
|
const handler = NextAuth(authOptions)
|
|
export { handler as GET, handler as POST }
|