Yarı resmi örnek
with-cookie-auth
Örnek olarak yönlendirme getInitialProps
. Geçerli bir desen olup olmadığından emin değilim, ama işte kod:
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()
}
}
Hem sunucu tarafını hem de istemci tarafını işler. fetch
Çağrı aslında Yetkilendirme jetonu almak biri, ayrı bir işlevi içine bu enkapsüle isteyebilirsiniz olduğunu.
Bunun yerine ne öneririm
1. Sunucu tarafı oluşturmaya yönlendirme (SSR sırasında flaştan kaçının)
Bu en yaygın durumdur. İlk yükte ilk sayfanın yanıp sönmesini önlemek için bu noktada yeniden yönlendirmek istiyorsunuz.
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 };
};
2. componentDidMount'a yönlendirme (SSR devre dışı bırakıldığında faydalıdır, örneğin statik modda)
Bu istemci tarafı oluşturma için bir geri dönüş.
componentDidMount() {
const { currentUser, router } = this.props;
if (!currentUser && !isPublicRoute(router.pathname)) {
Router.push("/account/login");
}
}
Statik modda ilk sayfayı yanıp sönmekten kaçınamadım, çünkü statik oluşturma sırasında yönlendiremezsiniz, ancak normal yaklaşımlardan daha iyi görünüyor. İlerledikçe düzenlemeye çalışacağım.
Tam örnek burada
Ne yazık ki sadece müşteri cevap ile sonuçlanan ilgili sorun