import NextAuth from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; type TA_Token = { token: string; user_id: number; }; export default NextAuth({ providers: [ CredentialsProvider({ // The name to display on the sign in form (e.g. 'Sign in with...') name: "Tube Archivist", // The credentials is used to generate a suitable form on the sign in page. // You can specify whatever fields you are expecting to be submitted. // e.g. domain, username, password, 2FA token, etc. // You can pass any HTML attribute to the tag through the object. credentials: { username: { label: "username", type: "text", placeholder: "jsmith@example.com", }, password: { label: "Password", type: "password" }, }, async authorize(credentials, req) { const payload = { username: credentials.username, password: credentials.password, }; const res = await fetch("http://localhost:8000/api/login/", { method: "POST", body: JSON.stringify(payload), headers: { "Content-Type": "application/json", "Accept-Language": "en-US", }, }); const ta_token: TA_Token = await res.json(); // If no error and we have user data, return it if (res.ok && ta_token) { // debug return { name: "TA User", email: "test@example.com", image: "test", ta_token, }; } // Return null if user data could not be retrieved return null; }, }), // ...add more providers here ], session: { maxAge: 30 * 24 * 60 * 60, strategy: "jwt", }, // customer sign in page // pages: { // signIn: "/login", // }, callbacks: { async session({ session, token, user }) { session.ta_token = token.ta_token; return session; }, async jwt({ token, user }) { if (user?.ta_token) { // @ts-ignore token.ta_token = user?.ta_token; } return token; }, }, theme: { colorScheme: "auto", // "auto" | "dark" | "light" brandColor: "", // Hex color code #33FF5D logo: "/img/banner-tube-archivist-dark.png", // Absolute URL to image }, // Enable debug messages in the console if you are having problems debug: process.env.NODE_ENV === "development", });