fix: github auth

This commit is contained in:
2024-12-16 19:32:16 +01:00
parent e54dcbc889
commit 412cadce83

View File

@@ -1,11 +1,17 @@
import { PrismaAdapter } from "@lucia-auth/adapter-prisma";
import { Lucia, Session, User } from "lucia";
import prisma from "../db";
import { cache } from "react";
import { cookies } from "next/headers";
import { GitHub } from "arctic";
import { PrismaAdapter } from '@lucia-auth/adapter-prisma';
import { Lucia, Session, User } from 'lucia';
import prisma from '../db';
import { cache } from 'react';
import { cookies } from 'next/headers';
import { GitHub } from 'arctic';
export const github = new GitHub(process.env.GITHUB_CLIENT!, process.env.GITHUB_SECRET!, 'http://localhost:3000/auth/github/callback');
export const github = new GitHub(
process.env.GITHUB_CLIENT!,
process.env.GITHUB_SECRET!,
`${
process.env.NODE_ENV === 'production' ? 'https://echospace.srizan.dev' : 'http://localhost:3000'
}/auth/github/callback`
);
const adapter = new PrismaAdapter(prisma.session, prisma.user);
export const lucia = new Lucia(adapter, {
@@ -15,42 +21,34 @@ export const lucia = new Lucia(adapter, {
expires: false,
attributes: {
// set to `true` when using HTTPS
secure: process.env.NODE_ENV === "production"
}
secure: process.env.NODE_ENV === 'production',
},
},
getUserAttributes: (attributes) => {
return {
githubId: attributes.githubId,
username: attributes.username
username: attributes.username,
};
}
},
});
export const validateRequest = cache(async () => {
const sessionId = cookies().get(lucia.sessionCookieName)?.value ?? null
const sessionId = cookies().get(lucia.sessionCookieName)?.value ?? null;
if (!sessionId)
return {
user: null,
session: null,
}
};
const { user, session } = await lucia.validateSession(sessionId)
const { user, session } = await lucia.validateSession(sessionId);
try {
if (session && session.fresh) {
const sessionCookie = lucia.createSessionCookie(session.id)
cookies().set(
sessionCookie.name,
sessionCookie.value,
sessionCookie.attributes
)
const sessionCookie = lucia.createSessionCookie(session.id);
cookies().set(sessionCookie.name, sessionCookie.value, sessionCookie.attributes);
}
if (!session) {
const sessionCookie = lucia.createBlankSessionCookie()
cookies().set(
sessionCookie.name,
sessionCookie.value,
sessionCookie.attributes
)
const sessionCookie = lucia.createBlankSessionCookie();
cookies().set(sessionCookie.name, sessionCookie.value, sessionCookie.attributes);
}
} catch {
// Next.js throws error attempting to set cookies when rendering page
@@ -58,11 +56,10 @@ export const validateRequest = cache(async () => {
return {
user,
session,
}
})
};
});
declare module "lucia" {
declare module 'lucia' {
interface Register {
Lucia: typeof lucia;
DatabaseUserAttributes: DatabaseUserAttributes;