session.ts 1.1 KB

1234567891011121314151617181920212223242526272829
  1. import type { IronSessionOptions } from 'iron-session';
  2. import { withIronSessionApiRoute, withIronSessionSsr } from 'iron-session/next';
  3. import { GetServerSidePropsContext, GetServerSidePropsResult, NextApiHandler } from 'next';
  4. import { UserModel } from './dto/models/user.dto';
  5. export const sessionOptions: IronSessionOptions = {
  6. password: process.env.SECRET_COOKIE_PASSWORD as string,
  7. cookieName: 'dbgpt-portal',
  8. cookieOptions: {
  9. secure: process.env.NODE_ENV === 'production',
  10. },
  11. };
  12. export function withSessionRoute(handler: NextApiHandler) {
  13. return withIronSessionApiRoute(handler, sessionOptions);
  14. }
  15. // Theses types are compatible with InferGetStaticPropsType https://nextjs.org/docs/basic-features/data-fetching#typescript-use-getstaticprops
  16. export function withSessionSsr<P extends { [key: string]: unknown } = { [key: string]: unknown }>(
  17. handler: (context: GetServerSidePropsContext) => GetServerSidePropsResult<P> | Promise<GetServerSidePropsResult<P>>,
  18. ) {
  19. return withIronSessionSsr(handler, sessionOptions);
  20. }
  21. declare module 'iron-session' {
  22. interface IronSessionData {
  23. user: UserModel;
  24. }
  25. }