我目前正在使用 NextJS 開發一個 Web 應用程式,并在其中創建了一個使用服務器端呈現的身份驗證系統。
然而,有時會發生在生產中(使用下一個啟動命令)該函式的重定向回傳未正確執行,并且用戶在斷開連接時未重定向到登錄頁面。
發生此錯誤時,重繪 頁面即可解決此問題。
這是有問題的功能
export const withAuthServerSideProps = (props?: WithServerSideAuthParams) => {
return async (context: GetServerSidePropsContext) => {
const {
getServerSidePropsFunc,
redirectCondition,
requiredRole,
route = '/signin',
} = props || {};
const response = await getUserData(context);
const isAuthed = !!response?.data;
let shouldRedirect;
switch (redirectCondition) {
case 'isInfluencer':
shouldRedirect = isAuthed && response.data.role === Roles.INFLUENCER;
break;
case 'isAuthed':
shouldRedirect = isAuthed;
break;
case 'isNotAuthed':
shouldRedirect = !isAuthed;
break;
case 'noRedirect':
shouldRedirect = false;
break;
}
if (
shouldRedirect ||
(requiredRole && requiredRole !== response?.data?.role)
) {
return {
redirect: {
destination: route,
permanent: false,
},
};
}
//et on exécute la fonction du SSR s'il y en a une
if (getServerSidePropsFunc) {
try {
const funcData = await getServerSidePropsFunc(context);
return {
props: {
data: funcData,
user: response?.data ?? null,
},
};
} catch (e) {
console.log(e);
return {
props: {
data: null,
user: response?.data ?? null,
},
};
}
}
return {
props: {
user: response?.data ?? null,
},
};
};
};
這是我在應用程式中呼叫它的方式,以便它使用 SSR 觸發
一個名為InfluencerPage的頁面中的示例
export const getServerSideProps = withAuthServerSideProps({
getServerSidePropsFunc,
});
export default InfluencerPage;
奇怪的是服務作業者的網路回應是錯誤的(它不包含重定向)

但其他網路回應正確,但未觸發重定向

也許是服務人員的快取導致了這種情況,但我不知道如何解決
uj5u.com熱心網友回復:
問題確實來自服務作業者快取策略,Github 上有人回答了我,這是鏈接: https ://github.com/vercel/next.js/discussions/42405#discussioncomment-4046461
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/530710.html
