Merged PR 2318: auth stabilisation: extract shared myportal auth guard helper
auth stabilisation: extract shared myportal auth guard helper ntroduces a small shared SSR helper (resolveMyPortalAuthContext) to standardize common myportal auth/session guards (session presence, session user identity, and pinsUser cookie) with preserved reason-coded diagnostics and signin redirect behavior. Migrates exactly two loaders (pages/myportal/searchresults.js, pages/myportal/addresssearchresults.js) to use the helper while keeping loader-specific UPSTREAM_FAILURE and CONTACT_LOOKUP_FAILED logic unchanged. Related work items: #23020
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { getSession } from "next-auth/react";
|
||||
import { consoleLogger } from "../../actions/core/logger";
|
||||
|
||||
const signinRedirect = {
|
||||
destination: "/auth/signin",
|
||||
permanent: false
|
||||
};
|
||||
|
||||
const buildSigninRedirectResult = () => ({ redirect: signinRedirect });
|
||||
|
||||
export async function resolveMyPortalAuthContext(ctx, options = {}) {
|
||||
const {
|
||||
loggerName = "MyPortalAuthGuard",
|
||||
noSessionMessage = "myportal loader missing session; redirecting to signin",
|
||||
noSessionUserMessage = "myportal loader missing session user identity; redirecting to signin",
|
||||
noPinsUserMessage = "myportal loader missing pinsUser cookie; redirecting to signin"
|
||||
} = options;
|
||||
|
||||
const session = await getSession(ctx);
|
||||
|
||||
if (!session) {
|
||||
consoleLogger({
|
||||
name: loggerName,
|
||||
reasonCode: "NO_SESSION",
|
||||
message: noSessionMessage
|
||||
});
|
||||
return { ok: false, redirect: buildSigninRedirectResult().redirect };
|
||||
}
|
||||
|
||||
if (!session?.user?.id || !session?.user?.email) {
|
||||
consoleLogger({
|
||||
name: loggerName,
|
||||
reasonCode: "NO_SESSION_USER",
|
||||
message: noSessionUserMessage,
|
||||
hasSessionUserId: !!session?.user?.id,
|
||||
hasSessionUserEmail: !!session?.user?.email
|
||||
});
|
||||
return { ok: false, redirect: buildSigninRedirectResult().redirect };
|
||||
}
|
||||
|
||||
const pinsUser = ctx?.req?.cookies?.pinsUser;
|
||||
if (!pinsUser) {
|
||||
consoleLogger({
|
||||
name: loggerName,
|
||||
reasonCode: "NO_PINSUSER_COOKIE",
|
||||
message: noPinsUserMessage
|
||||
});
|
||||
return { ok: false, redirect: buildSigninRedirectResult().redirect };
|
||||
}
|
||||
|
||||
return {
|
||||
ok: true,
|
||||
session,
|
||||
sessionUserId: session.user.id,
|
||||
sessionUserEmail: session.user.email,
|
||||
pinsUser
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user