আধা-সরকারী উদাহরণ
with-cookie-auth
উদাহরণ মধ্যে পুনর্নির্দেশ getInitialProps
। আমি এটি বৈধ প্যাটার্ন কিনা তা এখনও নিশ্চিত নই, তবে কোডটি এখানে:
Profile.getInitialProps = async ctx => {
const { token } = nextCookie(ctx)
const apiUrl = getHost(ctx.req) + '/api/profile'
const redirectOnError = () =>
typeof window !== 'undefined'
? Router.push('/login')
: ctx.res.writeHead(302, { Location: '/login' }).end()
try {
const response = await fetch(apiUrl, {
credentials: 'include',
headers: {
Authorization: JSON.stringify({ token }),
},
})
if (response.ok) {
const js = await response.json()
console.log('js', js)
return js
} else {
// https://github.com/developit/unfetch#caveats
return await redirectOnError()
}
} catch (error) {
// Implementation or Network error
return redirectOnError()
}
}
এটি সার্ভারের পাশ এবং ক্লায়েন্ট উভয় দিকই পরিচালনা করে। fetch
কল এক যে আসলে প্রমাণীকরণ টোকেন পেতে, আপনি একটি পৃথক ফাংশন মধ্যে এই encapsulate করতে চাইবেন হয়।
পরিবর্তে আমি কি পরামর্শ দেব
1. সার্ভার-সাইড রেন্ডারে পুনঃনির্দেশ (এসএসআর চলাকালীন ফ্ল্যাশ এড়ানো)
এটি সবচেয়ে সাধারণ ঘটনা। প্রথম লোডে প্রারম্ভিক পৃষ্ঠা ঝলকানি এড়াতে আপনি এই মুহুর্তে পুনর্নির্দেশ করতে চান।
MyApp.getInitialProps = async appContext => {
const currentUser = await getCurrentUser(); // define this beforehand
const appProps = await App.getInitialProps(appContext);
// check that we are in SSR mode (NOT static and NOT client-side)
if (typeof window === "undefined" && appContext.ctx.res.writeHead) {
if (!currentUser && !isPublicRoute(appContext.router.pathname)) {
appContext.ctx.res.writeHead(302, { Location: "/account/login" });
appContext.ctx.res.end();
}
}
return { ...appProps, currentUser };
};
২.ডোনোমডাউন্টে পুনঃনির্দেশ করুন (এসএসআর অক্ষম থাকাকালীন কার্যকর, যেমন স্ট্যাটিক মোডে)
এটি ক্লায়েন্ট সাইড রেন্ডারিংয়ের জন্য একটি ফলব্যাক।
componentDidMount() {
const { currentUser, router } = this.props;
if (!currentUser && !isPublicRoute(router.pathname)) {
Router.push("/account/login");
}
}
আমি স্ট্যাটিক মোডে প্রাথমিক পৃষ্ঠাটি ঝলকানো এড়াতে পারিনি, কারণ আপনি স্ট্যাটিক বিল্ড চলাকালীন পুনর্নির্দেশ করতে পারবেন না, তবে এটি স্বাভাবিক পদ্ধতির চেয়ে ভাল বলে মনে হয়। আমি অগ্রগতি হিসাবে সম্পাদনা করার চেষ্টা করব।
সম্পূর্ণ উদাহরণ এখানে
প্রাসঙ্গিক ইস্যু, যা দুঃখের সাথে ক্লায়েন্টের কেবল উত্তর দিয়ে শেষ হয়