0

我正在使用 next.js

因此,如果用户已登录并尝试访问 /register 或 /login,我会尝试在页面呈现之前将用户重定向到 /c/[id];我正在使用 getServerSideProps 并返回一个重定向对象。

redirectIfUserIsLoggedIn.ts 文件

import { GetServerSideProps } from "next";
import cookie from "cookie";

export const redirectIfUserIsLoggedIn: GetServerSideProps = async context => {
    interface IUserData {
        id: string;
        email: string;
        password: string;
        username: string;
    }

    type UserDataType = IUserData | undefined;

    let cookies: any;

    if (typeof context.req.headers.cookie === "string") {
        cookies = cookie.parse(context.req.headers.cookie);
    }

    let userData: UserDataType;

    if (cookies?.user) {
        userData = JSON.parse(cookies.user);
    }

    console.log(userData);
    if (userData) {
        return {
            redirect: {
                destination: `/c/${userData.id}`,
                permanent: false,
            },
        };
    }

    return { props: { url: context.resolvedUrl } };
};

如果用户登录,它的作用几乎就是将他们重定向到该动态路由

“pages/register.tsx”,这就是我所说的:

import { GetServerSideProps } from "next";
import { FC } from "react";
import Register from "../components/Register";
import { useCookies } from "../hooks/useCookies";
import { redirectIfUserIsLoggedIn } from "../randomFunctions/redirectIfUserIsLoggedIn";

const register: FC = props => {
    console.log(props);
    return (
        <div>
            <Register setCookie={useCookies} getCookies={useCookies} />
        </div>
    );
};

export const getServerSideProps: GetServerSideProps = redirectIfUserIsLoggedIn;

export default register;

这最初工作得很好,在我测试了几次之后我退出并转到 /register 路由,由于某种原因它仍然将我重定向到 /c/d73e564f-9f30-49c2-9232-4ecb5d42d1f0 女巫没有任何意义,因为那里是不可能访问 id 因为 cookie 不存在所以我 export const getServerSideProps: GetServerSideProps = redirectIfUserIsLoggedIn;在 register.tsx 文件中注释掉了这一行,它仍然重定向我然后我在 chrome 中尝试它在我注销后和当我的时候工作得很好登录然后在microsoft edge中尝试再次正常工作,所以问题必须纯粹基于勇敢。我能想到的唯一解释是它已将文件缓存在某处,这就是为什么即使我删除了 getServerSideProps 但缓存存储中没有任何内容它也不会停止重定向我的原因。谢谢你!

4

0 回答 0