UNPKG

payload-authjs

Version:
72 lines (71 loc) 3.68 kB
import NextAuth from "next-auth"; import { setAuthjsInstance } from "../authjs/getAuthjsInstance"; import { getProviderMetadata } from "../authjs/utils/config"; import { withPayloadAuthjs } from "../authjs/withPayloadAuthjs"; import { generateUsersCollection } from "./collection"; /** * The Auth.js plugin for Payload CMS */ export const authjsPlugin = (pluginOptions)=>(incomingConfig)=>{ const config = { ...incomingConfig }; // If the plugin is disabled, return the config as is if (pluginOptions.enabled === false) { return config; } // Generate users collection config.collections = config.collections ?? []; const collection = generateUsersCollection(config.collections, pluginOptions); // Add the SignInButton component to the admin login page (only if the user collection is the admin user collection) if (incomingConfig.admin?.user === collection.slug && pluginOptions.components?.SignInButton !== false) { const signInButtonOptions = pluginOptions.components?.SignInButton; config.admin = { ...config.admin, components: { ...config.admin?.components, providers: [ ...config.admin?.components?.providers ?? [], // Add the Auth.js SessionProvider to set the custom basePath ...pluginOptions.authjsConfig.basePath ? [ { path: "next-auth/react#SessionProvider", clientProps: { basePath: pluginOptions.authjsConfig.basePath } } ] : [] ], afterLogin: [ ...config.admin?.components?.afterLogin ?? [], ...pluginOptions.authjsConfig.providers.map((provider)=>getProviderMetadata(provider)).filter((provider)=>[ "oauth", "oidc", "webauthn" ].includes(provider.type)).map((provider)=>({ path: provider.type === "webauthn" ? "payload-authjs/components/webauthn#SignInButtonWebauthn" : "payload-authjs/components#SignInButton", clientProps: { icon: typeof signInButtonOptions?.icon === "function" ? signInButtonOptions.icon(provider) : signInButtonOptions?.icon, text: typeof signInButtonOptions?.text === "function" ? signInButtonOptions.text(provider) : signInButtonOptions?.text, provider } })) ] } }; } config.onInit = async (payload)=>{ payload.logger.debug(`Initializing Auth.js instance for collection '${collection.slug}'`); // Initialize Auth.js instance const authjs = NextAuth(withPayloadAuthjs({ payload, config: pluginOptions.authjsConfig, collectionSlug: collection.slug })); // Expose Auth.js instance to the payload instance setAuthjsInstance(payload, collection.slug, authjs); // Execute the incoming onInit hook await incomingConfig.onInit?.(payload); }; return config; }; //# sourceMappingURL=plugin.js.map