基本的に、私は自分のプロジェクトで Next.js を使用しており、いくつかの問題が発生しています。
redux を使用するプロジェクトで認証を行っています。私のログインページには、真かどうかをチェックするif条件がありisAuthenticated
ます(isAuthenticated
私のreduxストアからのものです)。true の場合、次のルーターが行いrouter.push('/');
ます。これは問題なく動作しますが、ホームページのページ ソースを表示すると、ログイン ページがソース ページとして表示されたままになります。どうしてこれなの?
また、同じくreduxからのユーザー認証をチェックするルート管理高次コンポーネントでホームページをラップしていますgetInitialProps
. ここでも、ルーティングとすべてが正常に機能します。ソース ページにまだログイン ページが表示されているだけです。私は次が初めてなので、何が悪いのかわかりません。
ログインページからのリダイレクトです。
import Router from 'next/router';
// ...
if (isAuthenticated) {
Router.push("/");
}
これがルートマネージャーです。
const isAuthenticated = store.getState().auth.isAuthenticated;
AuthPage.getInitialProps = async (ctx) => {
if (routeType === "authenticator") {
if (isAuthenticated) {
if (typeof window === "undefined") {
ctx.res.writeHead(302, { location: "/" });
ctx.res.end();
} else {
const router = useRouter();
router.push("/");
}
}
} else if (routeType === "private") {
if (!isAuthenticated) {
if (typeof window === "undefined") {
ctx.res.writeHead(302, { location: "/login" });
ctx.res.end();
} else {
const router = useRouter();
router.push("/login");
}
}
}
if (Component.getInitialProps) {
const authProps = await Component.getInitialProps({
...ctx,
auth: isAuthenticated,
});
return { ...authProps, isAuthenticated };
}
return { isAuthenticated };
};
return AuthPage;