Ajout de la gestion du refresh token lors de la connexion avec Keycloak et mise à jour de la déconnexion pour utiliser le refresh token. Modification de la navigation principale pour intégrer les fonctions de connexion et de déconnexion.
This commit is contained in:
parent
92c451efe5
commit
6018b853a0
@ -28,6 +28,7 @@ export const authOptions: NextAuthOptions = {
|
|||||||
// Au moment de la première connexion, sauvegarde de l'access token et du rôle dans le JWT
|
// Au moment de la première connexion, sauvegarde de l'access token et du rôle dans le JWT
|
||||||
if (account && profile) {
|
if (account && profile) {
|
||||||
token.accessToken = account.access_token;
|
token.accessToken = account.access_token;
|
||||||
|
token.refreshToken = account.refresh_token;
|
||||||
token.first_name = profile.given_name;
|
token.first_name = profile.given_name;
|
||||||
token.last_name = profile.family_name;
|
token.last_name = profile.family_name;
|
||||||
token.username = profile.preferred_username;
|
token.username = profile.preferred_username;
|
||||||
@ -48,6 +49,29 @@ export const authOptions: NextAuthOptions = {
|
|||||||
session: {
|
session: {
|
||||||
strategy: "jwt",
|
strategy: "jwt",
|
||||||
},
|
},
|
||||||
|
events: {
|
||||||
|
async signOut({ token }) {
|
||||||
|
try {
|
||||||
|
console.log("Déconnexion Keycloak");
|
||||||
|
console.log("Token", token);
|
||||||
|
const issuerUrl = process.env.KEYCLOAK_ISSUER!;
|
||||||
|
const logoutUrl = `${issuerUrl}/protocol/openid-connect/logout`;
|
||||||
|
await fetch(logoutUrl, {
|
||||||
|
method: "POST",
|
||||||
|
headers: {
|
||||||
|
"Content-Type": "application/x-www-form-urlencoded",
|
||||||
|
},
|
||||||
|
body: new URLSearchParams({
|
||||||
|
client_id: process.env.KEYCLOAK_CLIENT_ID!,
|
||||||
|
client_secret: process.env.KEYCLOAK_CLIENT_SECRET!,
|
||||||
|
refresh_token: token.refreshToken as string,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Erreur lors de la déconnexion Keycloak:", error);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const handler = NextAuth(authOptions);
|
const handler = NextAuth(authOptions);
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
"use client";
|
"use client";
|
||||||
|
|
||||||
import { useEffect, useState } from "react";
|
import { useState } from "react";
|
||||||
import {
|
import {
|
||||||
Calendar,
|
Calendar,
|
||||||
MessageSquare,
|
MessageSquare,
|
||||||
@ -11,7 +11,7 @@ import {
|
|||||||
import Image from "next/image";
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { Sidebar } from "./sidebar";
|
import { Sidebar } from "./sidebar";
|
||||||
import { useSession } from "next-auth/react";
|
import { useSession, signIn, signOut } from "next-auth/react";
|
||||||
|
|
||||||
export function MainNav() {
|
export function MainNav() {
|
||||||
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
|
const [isSidebarOpen, setIsSidebarOpen] = useState(false);
|
||||||
@ -83,12 +83,14 @@ export function MainNav() {
|
|||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div className='cursor-pointer text-white/80 hover:text-white'>
|
<div className='cursor-pointer text-white/80 hover:text-white'>
|
||||||
<Link href='/api/auth/signout'>Logout</Link>
|
<span onClick={() => signOut()}>Logout</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className='cursor-pointer text-white/80 hover:text-white'>
|
<div className='cursor-pointer text-white/80 hover:text-white'>
|
||||||
<Link href='/api/auth/signin'>Login</Link>
|
<span onClick={() => signIn("keycloak", { callbackUrl: "/" })}>
|
||||||
|
Login
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user