problem with lucia auth
Unanswered
Bombay posted this in #help-forum
BombayOP
4 Replies
BombayOP
import { cookies } from "next/headers";
import { cache } from "react";
import { lucia } from "#/lib/auth/lucia";
import { UserSessionData } from "#/types/lucia";
async function fetchUserSessionData(
rawSessionId?: string
): Promise<UserSessionData | null> {
const cookieStore = await cookies();
const session_id =
rawSessionId ?? cookieStore.get(lucia.sessionCookieName)?.value;
console.log({ session_id });
if (!session_id) {
return null;
}
const result = await lucia.validateSession(session_id);
console.log({ result });
if (result.session && result.session.fresh) {
const sessionCookie = lucia.createSessionCookie(result.session.id);
cookieStore.set(
sessionCookie.name,
sessionCookie.value,
sessionCookie.attributes
);
}
if (!result.session) {
const sessionCookie = lucia.createBlankSessionCookie();
cookieStore.set(
sessionCookie.name,
sessionCookie.value,
sessionCookie.attributes
);
}
if (!result.user || !result.session) {
return null;
}
return result;
}
export const getUserSessionData = cache(fetchUserSessionData);"use server";
import { compareSync } from "bcryptjs";
import { cookies } from "next/headers";
import { z } from "zod";
import { lucia } from "#/lib/auth/lucia";
import { SignInSchema } from "#/lib/auth/schemas";
import { userModel } from "#/database";
export async function signIn(data: z.infer<typeof SignInSchema>) {
const values = SignInSchema.safeParse(data);
if (!values.success) {
throw new Error("Cannot signin, bad data provided");
}
const user = await userModel.findOne({ email: values.data.email });
if (!user) {
throw new Error("Cannot signin, user not found");
}
const isPasswordVerified = compareSync(data.password, user.password);
if (!isPasswordVerified) {
throw new Error("Cannot signin, bad password");
}
const session = await lucia.createSession(user.id, {});
const sessionCookie = lucia.createSessionCookie(session.id);
const cookieStore = await cookies();
cookieStore.set(
sessionCookie.name,
sessionCookie.value,
sessionCookie.attributes
);
return { signedIn: true };
}what happens is that right after it is created, there is something not in the cookies(?) but in the database and when validating always is null
import { Lucia, TimeSpan } from "lucia";
import { adapter } from "#/database/index";
export const lucia = new Lucia(adapter, {
sessionExpiresIn: new TimeSpan(1, "d"),
sessionCookie: {
expires: false,
attributes: {
secure: process.env.NODE_ENV === "production",
},
},
getUserAttributes: (attributes) => {
return {
email: attributes.email,
firstName: attributes.firstName,
lastName: attributes.lastName,
createdAt: attributes.createdAt,
updatedAt: attributes.updatedAt,
activated: attributes.activated,
};
},
});