diff --git a/apps/examples/sveltekit/src/hooks.server.ts b/apps/examples/sveltekit/src/hooks.server.ts
index c4487e66df..fa1b5f5371 100644
--- a/apps/examples/sveltekit/src/hooks.server.ts
+++ b/apps/examples/sveltekit/src/hooks.server.ts
@@ -9,51 +9,16 @@ import Discord from "@auth/sveltekit/providers/discord"
import Twitch from "@auth/sveltekit/providers/twitch"
import Pinterest from "@auth/sveltekit/providers/pinterest"
-import {
- AUTH_GITHUB_ID,
- AUTH_GITHUB_SECRET,
- AUTH_LINKEDIN_ID,
- AUTH_LINKEDIN_SECRET,
- AUTH_GOOGLE_ID,
- AUTH_GOOGLE_SECRET,
- AUTH_FACEBOOK_ID,
- AUTH_FACEBOOK_SECRET,
- AUTH_TWITTER_ID,
- AUTH_TWITTER_SECRET,
- AUTH_AUTH0_ID,
- AUTH_AUTH0_SECRET,
- AUTH_AUTH0_ISSUER,
- AUTH_DISCORD_ID,
- AUTH_DISCORD_SECRET,
- AUTH_TWITCH_ID,
- AUTH_TWITCH_SECRET,
- AUTH_PINTEREST_ID,
- AUTH_PINTEREST_SECRET,
-} from "$env/static/private"
-
export const handle = SvelteKitAuth({
providers: [
- GitHub({ clientId: AUTH_GITHUB_ID, clientSecret: AUTH_GITHUB_SECRET }),
- LinkedIn({
- clientId: AUTH_LINKEDIN_ID,
- clientSecret: AUTH_LINKEDIN_SECRET,
- }),
- Google({ clientId: AUTH_GOOGLE_ID, clientSecret: AUTH_GOOGLE_SECRET }),
- Facebook({
- clientId: AUTH_FACEBOOK_ID,
- clientSecret: AUTH_FACEBOOK_SECRET,
- }),
- Twitter({ clientId: AUTH_TWITTER_ID, clientSecret: AUTH_TWITTER_SECRET }),
- Auth0({
- clientId: AUTH_AUTH0_ID,
- clientSecret: AUTH_AUTH0_SECRET,
- issuer: AUTH_AUTH0_ISSUER,
- }),
- Discord({ clientId: AUTH_DISCORD_ID, clientSecret: AUTH_DISCORD_SECRET }),
- Twitch({ clientId: AUTH_TWITCH_ID, clientSecret: AUTH_TWITCH_SECRET }),
- Pinterest({
- clientId: AUTH_PINTEREST_ID,
- clientSecret: AUTH_PINTEREST_SECRET,
- }),
+ GitHub,
+ LinkedIn,
+ Google,
+ Facebook,
+ Twitter,
+ Auth0,
+ Discord,
+ Twitch,
+ Pinterest,
],
})
diff --git a/packages/frameworks-sveltekit/src/lib/index.ts b/packages/frameworks-sveltekit/src/lib/index.ts
index 8e1510b190..949aa569df 100644
--- a/packages/frameworks-sveltekit/src/lib/index.ts
+++ b/packages/frameworks-sveltekit/src/lib/index.ts
@@ -200,7 +200,7 @@
///
import type { Handle, RequestEvent } from "@sveltejs/kit"
-import { dev } from "$app/environment"
+import { dev, building } from "$app/environment"
import { base } from "$app/paths"
import { env } from "$env/dynamic/private"
@@ -219,7 +219,7 @@ export async function getSession(
req: Request,
config: SvelteKitAuthConfig
): ReturnType {
- config.secret ??= env.AUTH_SECRET
+ setEnvDefaults(env, config)
config.trustHost ??= true
const prefix = config.prefix ?? `${base}/auth`
@@ -258,31 +258,23 @@ const actions: AuthAction[] = [
"error",
]
-type DynamicSvelteKitAuthConfig = (
- event: RequestEvent
-) => PromiseLike
-
/**
* The main entry point to `@auth/sveltekit`
* @see https://sveltekit.authjs.dev
*/
export function SvelteKitAuth(
- svelteKitAuthOptions: SvelteKitAuthConfig | DynamicSvelteKitAuthConfig
+ config:
+ | SvelteKitAuthConfig
+ | ((event: RequestEvent) => PromiseLike)
): Handle {
return async function ({ event, resolve }) {
- const authOptions =
- typeof svelteKitAuthOptions === "object"
- ? svelteKitAuthOptions
- : await svelteKitAuthOptions(event)
- const { prefix = `${base}/auth` } = authOptions
-
- authOptions.secret ??= env.AUTH_SECRET
- authOptions.redirectProxyUrl ??= env.AUTH_REDIRECT_PROXY_URL
- authOptions.trustHost ??= !!(env.AUTH_TRUST_HOST ?? env.VERCEL ?? dev)
+ const _config = typeof config === "object" ? config : await config(event)
+ setEnvDefaults(env, _config)
+ const { prefix = `${base}/auth` } = _config
const { url, request } = event
- event.locals.getSession ??= () => getSession(request, authOptions)
+ event.locals.getSession ??= () => getSession(request, _config)
const action = url.pathname
.slice(prefix.length + 1)
@@ -292,7 +284,7 @@ export function SvelteKitAuth(
return resolve(event)
}
- return Auth(request, authOptions)
+ return Auth(request, _config)
}
}
@@ -313,3 +305,30 @@ declare module "$env/dynamic/private" {
export const AUTH_TRUST_HOST: string
export const VERCEL: string
}
+
+export function setEnvDefaults(envObject: any, config: SvelteKitAuthConfig) {
+ if (building) return
+
+ config.redirectProxyUrl ??= env.AUTH_REDIRECT_PROXY_URL
+ config.secret ??= env.AUTH_SECRET
+ config.trustHost ??= !!(
+ env.AUTH_URL ??
+ env.NEXTAUTH_URL ??
+ env.AUTH_TRUST_HOST ??
+ env.VERCEL ??
+ env.NODE_ENV !== "production" ??
+ dev
+ )
+ config.providers = config.providers.map((p) => {
+ const finalProvider = typeof p === "function" ? p({}) : p
+ if (finalProvider.type === "oauth" || finalProvider.type === "oidc") {
+ const ID = finalProvider.id.toUpperCase()
+ finalProvider.clientId ??= envObject[`AUTH_${ID}_ID`]
+ finalProvider.clientSecret ??= envObject[`AUTH_${ID}_SECRET`]
+ if (finalProvider.type === "oidc") {
+ finalProvider.issuer ??= envObject[`AUTH_${ID}_ISSUER`]
+ }
+ }
+ return finalProvider
+ })
+}