Ignore:
Timestamp:
12/26/25 22:21:22 (7 months ago)
Author:
Tome <gjorgievtome@…>
Branches:
main
Children:
dd5067a
Parents:
e7f1bfa
Message:

Config authjs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • server/authjs-handler.ts

    re7f1bfa r898cf68  
    33import type { Session } from "@auth/core/types";
    44import { enhance, type UniversalHandler, type UniversalMiddleware } from "@universal-middleware/core";
    5 import {eq} from "drizzle-orm";
     5import {eq, or} from "drizzle-orm";
    66import { db } from "../database/drizzle/db";
    7 import { usersTable } from "../database/drizzle/schema";
     7import {adminsTable, usersTable} from "../database/drizzle/schema";
    88import bcrypt from "bcrypt";
    9 // import { users, accounts, sessions, verificationTokens } from "../database/drizzle/schema/auth";
     9import { AuthDrizzleAdapter } from "./drizzle/auth-adapter";
    1010
    1111const authjsConfig = {
     
    1313  trustHost: true,
    1414  secret: process.env.AUTH_SECRET,
     15  adapter: AuthDrizzleAdapter(),
    1516  session: {
    1617    strategy: "jwt",
     
    2728        const password = typeof credentials?.password === "string" ? credentials.password : null;
    2829
    29         if(!username || !password) { return null; }
     30        if(!username || !password || typeof username !== 'string' || typeof password !== 'string') { return null; }
    3031
    3132        const user = await db.query.usersTable.findFirst({
    32             where: eq(usersTable.username, username),
    33         });
     33            where: or(
     34                eq(usersTable.username, username),
     35                eq(usersTable.email, username)
     36            ),
     37          });
    3438
    35         if(!user) { return null; }
     39        if(!user) return null;
    3640
    37         const isPasswordValid = await bcrypt.compare(password, user.passwordHash);
     41        let isPasswordValid = false;
    3842
    39         if(!isPasswordValid) { return null; }
     43        if (user.passwordHash.startsWith('$2b$') || user.passwordHash.startsWith('$2a$')) {
     44            isPasswordValid = await bcrypt.compare(password, user.passwordHash);
     45        } else {
     46            isPasswordValid = password === user.passwordHash;
     47        }
     48
     49        if(!isPasswordValid) return null;
     50
     51          const admin = await db.query.adminsTable.findFirst({
     52              where: eq(adminsTable.userId, user.id),
     53          });
    4054
    4155        return {
    4256            id: String(user.id),
    43             name: user.username,
     57            username: user.username,
    4458            email: user.email,
     59            isAdmin: !!admin
    4560        }
    4661      },
     
    5065  callbacks: {
    5166      async jwt({ token, user }) {
    52           if (user) token.sub = user.id;
     67          if (user) {
     68              token.sub = user.id;
     69              token.username = user.name;
     70
     71              const customUser = user as any;
     72              token.email = customUser.email;
     73              token.isAdmin = customUser.isAdmin;
     74          }
    5375          return token;
    5476      },
    5577      async session({ session, token }) {
    56           if (session.user && token.sub) session.user.id = token.sub;
     78          if (session.user) {
     79              session.user.id = token.sub!;
     80              session.user.name = token.name as string;
     81
     82              const customToken = token as any;
     83              session.user.email = customToken.email;
     84              session.user.isAdmin = customToken.isAdmin;
     85          }
    5786          return session;
    5887      },
     
    6089} satisfies Omit<AuthConfig, "raw">;
    6190
    62 /**
    63  * Retrieve Auth.js session from Request
    64  */
    6591export async function getSession(req: Request, config: Omit<AuthConfig, "raw">): Promise<Session | null> {
    6692  setEnvDefaults(process.env, config);
     
    79105}
    80106
    81 /**
    82  * Add Auth.js session to context
    83  * @link {@see https://authjs.dev/getting-started/session-management/get-session}
    84  **/
    85107export const authjsSessionMiddleware: UniversalMiddleware = enhance(
    86108  async (request, context) => {
     
    104126);
    105127
    106 /**
    107  * Auth.js route
    108  * @link {@see https://authjs.dev/getting-started/installation}
    109  **/
    110128export const authjsHandler = enhance(
    111129  async (request) => {
Note: See TracChangeset for help on using the changeset viewer.