set-session-token.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { Request, Response } from 'express';
  2. import ms from 'ms';
  3. import { AuthOptions } from '../../config/vendure-config';
  4. /**
  5. * Sets the authToken either as a cookie or as a response header, depending on the
  6. * config settings.
  7. */
  8. export function setSessionToken(options: {
  9. sessionToken: string;
  10. rememberMe: boolean;
  11. authOptions: Required<AuthOptions>;
  12. req: Request;
  13. res: Response;
  14. }) {
  15. const { sessionToken, rememberMe, authOptions, req, res } = options;
  16. const usingCookie =
  17. authOptions.tokenMethod === 'cookie' ||
  18. (Array.isArray(authOptions.tokenMethod) && authOptions.tokenMethod.includes('cookie'));
  19. const usingBearer =
  20. authOptions.tokenMethod === 'bearer' ||
  21. (Array.isArray(authOptions.tokenMethod) && authOptions.tokenMethod.includes('bearer'));
  22. if (usingCookie) {
  23. if (req.session) {
  24. if (rememberMe) {
  25. req.sessionOptions.maxAge = ms('1y');
  26. }
  27. req.session.token = sessionToken;
  28. }
  29. }
  30. if (usingBearer) {
  31. res.set(authOptions.authTokenHeaderKey, sessionToken);
  32. }
  33. }