Help with next-authv5(beta) and nextjs14
Unanswered
Giant panda posted this in #help-forum
Giant pandaOP
Im facing an issue with extending user sessions in order to configure role-based routes.
auth.ts:
export const {
handlers: { GET, POST },
auth,
signIn,
signOut,
} = NextAuth({
...authConfig,
callbacks: {
async jwt({ token }) {
if (!token.email) return token;
const existingUser = await getUserByEmail(token.email);
if (!existingUser) return token;
token.sub = existingUser.user_id.toString();
token.username = existingUser.username;
token.email = existingUser.email;
token.role = existingUser.role;
return token;
},
async session({ token, session }) {
if (token.sub && session.user) {
session.user.id = token.sub;
}
if (token.role && session.user) {
session.user.role = token.role as UserRole;
}
if (session.user) {
session.user.username = token.username;
session.user.email = token.email;
}
return session;
},
},
adapter: PrismaAdapter(prisma),
session: { strategy: "jwt" },
});
auth.config.ts:
export default {
pages: {
signIn: "/login",
error: "/auth/error",
},
providers: [
Credentials({
async authorize(credentials) {
const { email } = credentials;
const user = await getUserByEmail(email);
if (user) return user;
return null;
},
}),
],
} satisfies NextAuthConfig;
middelware.ts
const { auth } = NextAuth(authConfig);
export default auth((req) => {
const { nextUrl } = req;
const isLoggedIn = !!req.auth;
return null;
});
export const config = {
matcher: ["/((?!.+\.[\w]+$|_next).)", "/", "/(api|trpc)(.)"],
};
`
req.auth in the middle only include email
auth.ts:
export const {
handlers: { GET, POST },
auth,
signIn,
signOut,
} = NextAuth({
...authConfig,
callbacks: {
async jwt({ token }) {
if (!token.email) return token;
const existingUser = await getUserByEmail(token.email);
if (!existingUser) return token;
token.sub = existingUser.user_id.toString();
token.username = existingUser.username;
token.email = existingUser.email;
token.role = existingUser.role;
return token;
},
async session({ token, session }) {
if (token.sub && session.user) {
session.user.id = token.sub;
}
if (token.role && session.user) {
session.user.role = token.role as UserRole;
}
if (session.user) {
session.user.username = token.username;
session.user.email = token.email;
}
return session;
},
},
adapter: PrismaAdapter(prisma),
session: { strategy: "jwt" },
});
auth.config.ts:
export default {
pages: {
signIn: "/login",
error: "/auth/error",
},
providers: [
Credentials({
async authorize(credentials) {
const { email } = credentials;
const user = await getUserByEmail(email);
if (user) return user;
return null;
},
}),
],
} satisfies NextAuthConfig;
middelware.ts
const { auth } = NextAuth(authConfig);
export default auth((req) => {
const { nextUrl } = req;
const isLoggedIn = !!req.auth;
return null;
});
export const config = {
matcher: ["/((?!.+\.[\w]+$|_next).)", "/", "/(api|trpc)(.)"],
};
`
req.auth in the middle only include email