update widget token mail 3

This commit is contained in:
Alma 2025-04-09 23:19:59 +02:00
parent 5203045d8b
commit ef52935c35

View File

@ -1,21 +1,61 @@
import NextAuth, { NextAuthOptions } from "next-auth";
import KeycloakProvider from "next-auth/providers/keycloak";
declare module "next-auth" {
interface Session {
user: {
id: string;
name?: string | null;
email?: string | null;
image?: string | null;
username: string;
first_name: string;
last_name: string;
role: string[];
};
accessToken: string;
}
interface JWT {
accessToken: string;
refreshToken: string;
accessTokenExpires: number;
role: string[];
username: string;
first_name: string;
last_name: string;
}
}
export const authOptions: NextAuthOptions = {
providers: [
KeycloakProvider({
clientId: process.env.KEYCLOAK_CLIENT_ID!,
clientSecret: process.env.KEYCLOAK_CLIENT_SECRET!,
issuer: process.env.KEYCLOAK_ISSUER!,
profile(profile) {
return {
id: profile.sub,
name: profile.name ?? profile.preferred_username,
email: profile.email,
first_name: profile.given_name ?? '',
last_name: profile.family_name ?? '',
username: profile.preferred_username ?? profile.email?.split('@')[0] ?? '',
role: profile.groups ?? [],
}
},
}),
],
callbacks: {
async jwt({ token, account, profile }) {
if (account) {
if (account && profile) {
token.accessToken = account.access_token;
token.refreshToken = account.refresh_token;
token.accessTokenExpires = account.expires_at! * 1000;
token.role = profile?.groups || [];
token.role = (profile as any).groups ?? [];
token.username = (profile as any).preferred_username ?? profile.email?.split('@')[0] ?? '';
token.first_name = (profile as any).given_name ?? '';
token.last_name = (profile as any).family_name ?? '';
return token;
}
@ -62,14 +102,14 @@ export const authOptions: NextAuthOptions = {
throw new Error("RefreshAccessTokenError");
}
session.accessToken = token.accessToken as string;
session.accessToken = token.accessToken;
session.user = {
...session.user,
id: token.sub,
first_name: token.first_name,
last_name: token.last_name,
username: token.username,
role: token.role || [],
id: token.sub as string,
first_name: token.first_name ?? '',
last_name: token.last_name ?? '',
username: token.username ?? '',
role: token.role ?? [],
};
return session;
},