我在使用iron-session和next.js时丢失刷新和选项卡之间的用户信息(会话)

but5z9lq  于 2023-01-08  发布在  其他
关注(0)|答案(2)|浏览(186)

我目前正在使用iron-session和next.js进行一个项目。我不会在点击Link标签时丢失我的用户。但如果我刷新用户,用户将变为未定义。Cookie已设置,刷新时不会删除。我不知道出了什么问题。
下面是我的登录.ts代码:

export default withIronSessionApiRoute(loginRoute, sessionOptions);

async function loginRoute(req: NextApiRequest, res: NextApiResponse) {

    try {
        const {
            data: {tcId, admin, userName},
        } = await axios('http://localhost:8080/user/login', {
            method: 'POST',
            headers: {'Content-Type': 'application/json'},
            data: JSON.stringify(req.body),
        });
        const user = {tcId: tcId, userName: userName, admin: admin} as User;
        req.session.user = user;
        await req.session.save();
        
        res.json(user);
    } catch (error) {
        res.status(500).json({message: (error as Error).message})
    }}

下面是我的会话.ts代码:

// this file is a wrapper with defaults to be used in both API routes and `getServerSideProps` functions
import type { IronSessionOptions } from 'iron-session'
import type { User } from '../pages/api/user'

export const sessionOptions: IronSessionOptions = {
  password: process.env.SECRET_COOKIE_PASSWORD as string,
  cookieName: 'eys-cookie',
  // secure: true should be used in production (HTTPS) but can't be used in development (HTTP)
  cookieOptions: {
    secure: process.env.NODE_ENV === 'production',
  },
};

// This is where we specify the typings of req.session.*
declare module 'iron-session' {
  interface IronSessionData {
    user?: User
  }
}

正如我之前所说,我不会失去我的用户。而路由使用链接标签从下一个。刷新导致失去我的用户。也没有其他标签到达我的用户。
我可以显示更多的代码,如果需要的话。但我认为问题就在这里。

bvhaajcl

bvhaajcl1#

我有一个类似的问题,并解决了标签切换设置:

revalidateOnFocus = false,

对于useSWR函数
样品

const fetcher = (url: any) => fetch(url).then((res) => res.json());
  const options = {
    revalidateOnFocus: false,
  };
  const {
    data: session,
    error,
    mutate: mutateUser,
  } = useSWR<Session>("/api/session", fetcher, options);

你也可以在这里探索其他选项https://swr.vercel.app/docs/options

gorkyyrv

gorkyyrv2#

不知道是否仍存在此问题,但可能是您忘记在de index或_app组件上添加SWRconfig

import { AppProps } from 'next/app'
import { SWRConfig } from 'swr'
import fetchJson from 'lib/fetchJson'

function MyApp({ Component, pageProps }: AppProps) {
  return (
    <SWRConfig
         value={{
        fetcher: fetchJson,
        onError: (err) => {
          console.error(err)
        },
      }}
    >
      <Component {...pageProps} />
    </SWRConfig>
  )
}

导出默认MyApp

相关问题