can sign in and out

This commit is contained in:
Avraham Sakal
2025-09-18 10:05:20 -04:00
parent 6d80d3a9a6
commit 83e3f867dd
6 changed files with 204 additions and 12 deletions
+51 -11
View File
@@ -5,6 +5,7 @@ import {
setEnvDefaults,
} from "@auth/core";
import CredentialsProvider from "@auth/core/providers/credentials";
import GoogleProvider from "@auth/core/providers/google";
import type { Session } from "@auth/core/types";
// TODO: stop using universal-middleware and directly integrate server middlewares instead and/or use vike-server https://vike.dev/server. (Bati generates boilerplates that use universal-middleware https://github.com/magne4000/universal-middleware to make Bati's internal logic easier. This is temporary and will be removed soon.)
import type {
@@ -12,17 +13,11 @@ import type {
UniversalHandler,
UniversalMiddleware,
} from "@universal-middleware/core";
import { env } from "./env.js";
import { getDb } from "../database/index.js";
const env: Record<string, string | undefined> =
typeof process?.env !== "undefined"
? process.env
: import.meta && "env" in import.meta
? (
import.meta as ImportMeta & {
env: Record<string, string | undefined>;
}
).env
: {};
const POSTGRES_CONNECTION_STRING =
"postgres://neondb_owner:npg_sOVmj8vWq2zG@ep-withered-king-adiz9gpi-pooler.c-2.us-east-1.aws.neon.tech:5432/neondb?sslmode=require&channel_binding=true";
if (!globalThis.crypto) {
/**
@@ -43,7 +38,7 @@ const authjsConfig = {
env.AUTH_TRUST_HOST ?? env.VERCEL ?? env.NODE_ENV !== "production"
),
// TODO: Replace secret {@see https://authjs.dev/reference/core#secret}
secret: "MY_SECRET",
secret: "buginoo",
providers: [
// TODO: Choose and implement providers
CredentialsProvider({
@@ -66,7 +61,52 @@ const authjsConfig = {
return user ?? null;
},
}),
GoogleProvider({
clientId:
"697711350664-t6237s5n3ttjd1npp1qif1aupptkr0va.apps.googleusercontent.com",
clientSecret: "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",
}),
],
callbacks: {
async signIn({ user, account, profile }) {
if (typeof user?.email !== "string") return false;
const db = await getDb(POSTGRES_CONNECTION_STRING);
const userFromDb = await db.users.findByEmailAddress(user.email);
if (!userFromDb) {
return false;
}
console.log("signIn", user, account, profile);
return true;
},
jwt: async ({ token }) => {
if (typeof token?.email !== "string") return token;
const db = await getDb(POSTGRES_CONNECTION_STRING);
let userFromDb = await db.users.findByEmailAddress(token.email || "");
if (!userFromDb) {
userFromDb = await db.users.create({
// id: token.id,
email: token.email,
username: token.email,
password: null,
createdAt: null,
lastLogin: null,
});
}
return {
...token,
id: userFromDb?.id || "",
};
},
session: ({ token, session }) => {
return {
...session,
user: {
...session.user,
id: token.id as string,
},
};
},
},
} satisfies Omit<AuthConfig, "raw">;
/**