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 NextAuth, { NextAuthOptions } from "next-auth";
import KeycloakProvider from "next-auth/providers/keycloak"; 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 = { export const authOptions: NextAuthOptions = {
providers: [ providers: [
KeycloakProvider({ KeycloakProvider({
clientId: process.env.KEYCLOAK_CLIENT_ID!, clientId: process.env.KEYCLOAK_CLIENT_ID!,
clientSecret: process.env.KEYCLOAK_CLIENT_SECRET!, clientSecret: process.env.KEYCLOAK_CLIENT_SECRET!,
issuer: process.env.KEYCLOAK_ISSUER!, 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: { callbacks: {
async jwt({ token, account, profile }) { async jwt({ token, account, profile }) {
if (account) { if (account && profile) {
token.accessToken = account.access_token; token.accessToken = account.access_token;
token.refreshToken = account.refresh_token; token.refreshToken = account.refresh_token;
token.accessTokenExpires = account.expires_at! * 1000; 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; return token;
} }
@ -62,14 +102,14 @@ export const authOptions: NextAuthOptions = {
throw new Error("RefreshAccessTokenError"); throw new Error("RefreshAccessTokenError");
} }
session.accessToken = token.accessToken as string; session.accessToken = token.accessToken;
session.user = { session.user = {
...session.user, ...session.user,
id: token.sub, id: token.sub as string,
first_name: token.first_name, first_name: token.first_name ?? '',
last_name: token.last_name, last_name: token.last_name ?? '',
username: token.username, username: token.username ?? '',
role: token.role || [], role: token.role ?? [],
}; };
return session; return session;
}, },