payload-authjs
Version:
A Payload CMS 3 plugin for Auth.js 5
37 lines (36 loc) • 1.49 kB
JavaScript
import NextAuth from "next-auth";
import { revalidateTag } from "next/cache";
import { cookies } from "next/headers";
import { withPayload } from "../../../authjs/withPayload";
import { AUTHJS_STRATEGY_NAME } from "../../AuthjsAuthStrategy";
/**
* Add logout hook to destroy the authjs session
*
* @see https://payloadcms.com/docs/hooks/collections#afterlogout
* @see https://github.com/payloadcms/payload/blob/main/packages/payload/src/auth/operations/logout.ts
*/ export const logoutHook = (pluginOptions)=>{
// Return the logout hook
return async ({ req })=>{
// Check if user is authenticated using the authjs strategy
if (req.user?._strategy !== AUTHJS_STRATEGY_NAME) {
return;
}
// Create authjs instance
const { signOut } = NextAuth(withPayload(pluginOptions.authjsConfig, {
payload: req.payload,
userCollectionSlug: pluginOptions.userCollectionSlug
}));
// Sign out and generate expired cookies using authjs
const { cookies: authJsCookies } = await signOut({
redirect: false
});
// Destroy the authjs session cookies
const requestCookies = await cookies();
for (const cookie of authJsCookies){
requestCookies.set(cookie.name, cookie.value, cookie.options);
}
// Revalidate the cache for the payload session
revalidateTag("payload-session");
};
};
//# sourceMappingURL=logout.js.map