首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Auth0和Cypress拦截Auth0 getSession

用Auth0和Cypress拦截Auth0 getSession
EN

Stack Overflow用户
提问于 2022-11-24 19:29:00
回答 1查看 14关注 0票数 0

我正在用SSR构建NextJS应用程序。我编写了调用supabase的getServerSideProps函数。在进行调用之前,我试图通过从getSession包调用@auth0/nextjs-auth0函数来获取用户会话。

我试图在handlers.ts文件中模拟它:

代码语言:javascript
复制
import { rest } from 'msw';

export const handlers = [
  // this is the endpoint called by getSession
  rest.get('/api/auth/session', (_req, res, ctx) => {
    return res(ctx.json(USER_DATA));
  }),

  rest.get('https://<supabase-id>.supabase.co/rest/v1/something', (_req, res, ctx) => {
    return res(ctx.json(SOMETHING));
  }),
];

我的模拟文件:requestMocks/index.ts

代码语言:javascript
复制
export const initMockServer = async () => {
  const { server } = await import('./server');
  server.listen();

  return server;
};

export const initMockBrowser = async () => {
  const { worker } = await import('./browser');
  worker.start();

  return worker;
};

export const initMocks = async () => {
  if (typeof window === 'undefined') {
    console.log('<<<< setup server');
    return initMockServer();
  }

  console.log('<<<< setup browser');
  return initMockBrowser();
};

initMocks();

最后,我在_app.tsx文件中调用它:

代码语言:javascript
复制
if (process.env.NEXT_PUBLIC_API_MOCKING === 'true') {
  require('../requestMocks');
}

不幸的是,它确实对我有用。在我的页面组件中的getServerSideProps函数中没有用户会话数据:

代码语言:javascript
复制
import { getSession } from '@auth0/nextjs-auth0';

export const getServerSideProps = async ({ req, res }: { req: NextApiRequest; res: NextApiResponse }) => {
  const session = getSession(req, res);

  if (!session?.user.accessToken) {
    // I'm constantly falling here
    console.log('no.session');
    return { props: { something: [] } };
  }

  // DO something else
};

任何关于如何让它在柏树测试中工作的建议都是很棒的。

我希望能够用getServerSideProps库模拟在MSW.js函数中提出的请求。

EN

回答 1

Stack Overflow用户

发布于 2022-11-24 20:16:52

我终于成功了。看来我没必要嘲笑任何电话。我需要复制我的用户appSession cookie并将其保存在cypress/fixtures/appSessionCookie.json文件中:

代码语言:javascript
复制
{
  "appSession": "<cookie-value>"
}

然后将其用于测试,如下所示:

代码语言:javascript
复制
  before(() => {
    cy.fixture('appSessionCookie').then((cookie) => {
      cy.setCookie('appSession', cookie.appSession);
    });
  });

这使得用户自动使用Auth0登录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74565481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档