From 91c79ed6b9ba2244088fdecc4d5b5e4480c620cf Mon Sep 17 00:00:00 2001 From: ImAlpha Date: Thu, 7 Dec 2023 22:38:51 -0800 Subject: [PATCH] updated schema for next auth --- .../app/api/auth/[...nextauth]/route.ts | 14 ++- Websites/jefes-nextjs/db/migrate.ts | 4 +- Websites/jefes-nextjs/db/schema.ts | 92 ++++++++++++++++--- Websites/jefes-nextjs/drizzle.config.ts | 4 + ...trike.sql => 0000_charming_silhouette.sql} | 2 +- .../migrations/meta/0000_snapshot.json | 4 +- .../drizzle/migrations/meta/_journal.json | 4 +- Websites/jefes-nextjs/package-lock.json | 9 ++ Websites/jefes-nextjs/package.json | 1 + 9 files changed, 108 insertions(+), 26 deletions(-) rename Websites/jefes-nextjs/drizzle/migrations/{0000_friendly_lady_deathstrike.sql => 0000_charming_silhouette.sql} (77%) diff --git a/Websites/jefes-nextjs/app/api/auth/[...nextauth]/route.ts b/Websites/jefes-nextjs/app/api/auth/[...nextauth]/route.ts index 127fbd1..89581c1 100644 --- a/Websites/jefes-nextjs/app/api/auth/[...nextauth]/route.ts +++ b/Websites/jefes-nextjs/app/api/auth/[...nextauth]/route.ts @@ -1,11 +1,14 @@ import NextAuth from "next-auth"; import CredentialsProvider from "next-auth/providers/credentials"; import { compare } from "bcrypt"; +import { DrizzleAdapter } from "@auth/drizzle-adapter"; import { db, connection } from "@/db/db"; import { users } from "@/db/schema"; import { eq } from "drizzle-orm"; +import isValidCredentials from "zod"; const handler = NextAuth({ + adapter: DrizzleAdapter(db), session: { strategy: "jwt", }, @@ -27,19 +30,20 @@ const handler = NextAuth({ .select() .from(users) .where(eq(users.email, `${credentials?.email}`)); + + if (!response) { + return null; + } // compare hashed password with password entered const passwordCheck = await compare( - `${credentials?.password}`, + `${credentials?.password}` || "", response[0].password ); console.log({ passwordCheck }); if (passwordCheck) { - return { - id: response[0].id, - email: response[0].email, - }; + return users; } return null; }, diff --git a/Websites/jefes-nextjs/db/migrate.ts b/Websites/jefes-nextjs/db/migrate.ts index 66b949c..b95244d 100644 --- a/Websites/jefes-nextjs/db/migrate.ts +++ b/Websites/jefes-nextjs/db/migrate.ts @@ -3,7 +3,7 @@ import { migrate } from 'drizzle-orm/mysql2/migrator'; import { db, connection } from './db'; // This will run migrations on the database, skipping the ones already applied -await migrate(db, { migrationsFolder: './drizzle/migrations' }); +const push = await migrate(db, { migrationsFolder: './drizzle/migrations' }); // Don't forget to close the connection, otherwise the script will hang -await connection.end(); \ No newline at end of file +const con = await connection.end(); \ No newline at end of file diff --git a/Websites/jefes-nextjs/db/schema.ts b/Websites/jefes-nextjs/db/schema.ts index 20e8b2f..ac902b3 100644 --- a/Websites/jefes-nextjs/db/schema.ts +++ b/Websites/jefes-nextjs/db/schema.ts @@ -1,26 +1,90 @@ // db/schema.ts // pnpm drizzle-kit generate:mysql // pnpm tsx db/migrate.ts -import { - index, - int, - mysqlTable, - bigint, - varchar, - timestamp, - mysqlSchema, -} from "drizzle-orm/mysql-core"; +// import { +// index, +// int, +// mysqlTable, +// bigint, +// varchar, +// timestamp, +// mysqlSchema, +// } from "drizzle-orm/mysql-core"; // export const mySchema = mysqlSchema("drizzle_jefes") for creating a new db -export const users = mysqlTable("users", { - id: bigint("id", { mode: "number" }).primaryKey().autoincrement(), - email: varchar("email", { length: 256 }).notNull(), - password: varchar("password", { length: 256 }).notNull(), -}); +// export const users = mysqlTable("users", { +// id: int("id").primaryKey().autoincrement(), +// email: varchar("email", { length: 256 }).notNull(), +// password: varchar("password", { length: 256 }).notNull(), +// }); // export const menuItems = mysqlTable("menu_item", { // id: bigint("id", { mode: "number" }).primaryKey().autoincrement(), // itemName: varchar("item_name", { length: 256 }), // itemDescription: varchar("item_description", { length: 256 }), // }); + +import { + int, + timestamp, + mysqlTable, + primaryKey, + varchar, +} from "drizzle-orm/mysql-core"; +import type { AdapterAccount } from "@auth/core/adapters"; + +export const users = mysqlTable("user", { + id: varchar("id", { length: 255 }).notNull().primaryKey(), + name: varchar("name", { length: 255 }), + email: varchar("email", { length: 255 }).notNull(), + emailVerified: timestamp("emailVerified", { + mode: "date", + fsp: 3, + }).defaultNow(), + image: varchar("image", { length: 255 }), +}); + +export const accounts = mysqlTable( + "account", + { + userId: varchar("userId", { length: 255 }) + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + type: varchar("type", { length: 255 }) + .$type() + .notNull(), + provider: varchar("provider", { length: 255 }).notNull(), + providerAccountId: varchar("providerAccountId", { length: 255 }).notNull(), + refresh_token: varchar("refresh_token", { length: 255 }), + access_token: varchar("access_token", { length: 255 }), + expires_at: int("expires_at"), + token_type: varchar("token_type", { length: 255 }), + scope: varchar("scope", { length: 255 }), + id_token: varchar("id_token", { length: 2048 }), + session_state: varchar("session_state", { length: 255 }), + }, + (account) => ({ + compoundKey: primaryKey(account.provider, account.providerAccountId), + }) +); + +export const sessions = mysqlTable("session", { + sessionToken: varchar("sessionToken", { length: 255 }).notNull().primaryKey(), + userId: varchar("userId", { length: 255 }) + .notNull() + .references(() => users.id, { onDelete: "cascade" }), + expires: timestamp("expires", { mode: "date" }).notNull(), +}); + +export const verificationTokens = mysqlTable( + "verificationToken", + { + identifier: varchar("identifier", { length: 255 }).notNull(), + token: varchar("token", { length: 255 }).notNull(), + expires: timestamp("expires", { mode: "date" }).notNull(), + }, + (vt) => ({ + compoundKey: primaryKey(vt.identifier, vt.token), + }) +); diff --git a/Websites/jefes-nextjs/drizzle.config.ts b/Websites/jefes-nextjs/drizzle.config.ts index 09af760..fbf0b93 100644 --- a/Websites/jefes-nextjs/drizzle.config.ts +++ b/Websites/jefes-nextjs/drizzle.config.ts @@ -2,6 +2,10 @@ import type { Config } from "drizzle-kit"; import "dotenv/config"; +if (!process.env.DB_HOST) { + throw new Error('DATABASE_URL is missing'); +} + export default { schema: "./db/schema.ts", out: "./drizzle/migrations", diff --git a/Websites/jefes-nextjs/drizzle/migrations/0000_friendly_lady_deathstrike.sql b/Websites/jefes-nextjs/drizzle/migrations/0000_charming_silhouette.sql similarity index 77% rename from Websites/jefes-nextjs/drizzle/migrations/0000_friendly_lady_deathstrike.sql rename to Websites/jefes-nextjs/drizzle/migrations/0000_charming_silhouette.sql index 1fc4fca..9d045b8 100644 --- a/Websites/jefes-nextjs/drizzle/migrations/0000_friendly_lady_deathstrike.sql +++ b/Websites/jefes-nextjs/drizzle/migrations/0000_charming_silhouette.sql @@ -1,5 +1,5 @@ CREATE TABLE `users` ( - `id` bigint AUTO_INCREMENT NOT NULL, + `id` int AUTO_INCREMENT NOT NULL, `email` varchar(256) NOT NULL, `password` varchar(256) NOT NULL, CONSTRAINT `users_id` PRIMARY KEY(`id`) diff --git a/Websites/jefes-nextjs/drizzle/migrations/meta/0000_snapshot.json b/Websites/jefes-nextjs/drizzle/migrations/meta/0000_snapshot.json index 8db8796..9e41c70 100644 --- a/Websites/jefes-nextjs/drizzle/migrations/meta/0000_snapshot.json +++ b/Websites/jefes-nextjs/drizzle/migrations/meta/0000_snapshot.json @@ -1,7 +1,7 @@ { "version": "5", "dialect": "mysql", - "id": "27fe79c5-67fc-42d1-be66-66202ed1e005", + "id": "9e600bcf-c5c3-4ba9-9a1f-0d981d718812", "prevId": "00000000-0000-0000-0000-000000000000", "tables": { "users": { @@ -9,7 +9,7 @@ "columns": { "id": { "name": "id", - "type": "bigint", + "type": "int", "primaryKey": false, "notNull": true, "autoincrement": true diff --git a/Websites/jefes-nextjs/drizzle/migrations/meta/_journal.json b/Websites/jefes-nextjs/drizzle/migrations/meta/_journal.json index 0c3dc85..636f1ce 100644 --- a/Websites/jefes-nextjs/drizzle/migrations/meta/_journal.json +++ b/Websites/jefes-nextjs/drizzle/migrations/meta/_journal.json @@ -5,8 +5,8 @@ { "idx": 0, "version": "5", - "when": 1701503074409, - "tag": "0000_friendly_lady_deathstrike", + "when": 1702012909346, + "tag": "0000_charming_silhouette", "breakpoints": true } ] diff --git a/Websites/jefes-nextjs/package-lock.json b/Websites/jefes-nextjs/package-lock.json index c1e02dc..6378357 100644 --- a/Websites/jefes-nextjs/package-lock.json +++ b/Websites/jefes-nextjs/package-lock.json @@ -8,6 +8,7 @@ "name": "jefes-nextjs", "version": "0.1.0", "dependencies": { + "@auth/drizzle-adapter": "^0.3.9", "@planetscale/database": "^1.11.0", "@radix-ui/react-slot": "^1.0.2", "@react-google-maps/api": "^2.19.2", @@ -94,6 +95,14 @@ } } }, + "node_modules/@auth/drizzle-adapter": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@auth/drizzle-adapter/-/drizzle-adapter-0.3.9.tgz", + "integrity": "sha512-xDHYofXyxIvqkLqsrxnnRWpNLJVpvPw+2qlFuZxkMYs83+geYHQqMg0GBrB/pAoNx1+1hG1DjGQvCeSr52FPKg==", + "dependencies": { + "@auth/core": "0.18.4" + } + }, "node_modules/@babel/runtime": { "version": "7.23.2", "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", diff --git a/Websites/jefes-nextjs/package.json b/Websites/jefes-nextjs/package.json index 730671a..981db0e 100644 --- a/Websites/jefes-nextjs/package.json +++ b/Websites/jefes-nextjs/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@auth/drizzle-adapter": "^0.3.9", "@planetscale/database": "^1.11.0", "@radix-ui/react-slot": "^1.0.2", "@react-google-maps/api": "^2.19.2",