我正在使用 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 但缓存存储中没有任何内容它也不会停止重定向我的原因。谢谢你!