extract-session-token.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { Request } from 'express';
  2. import { AuthOptions } from '../../config/vendure-config';
  3. /**
  4. * Get the session token from either the cookie or the Authorization header, depending
  5. * on the configured tokenMethod.
  6. */
  7. export function extractSessionToken(
  8. req: Request,
  9. tokenMethod: Exclude<AuthOptions['tokenMethod'], undefined>,
  10. ): string | undefined {
  11. const tokenFromCookie = getFromCookie(req);
  12. const tokenFromHeader = getFromHeader(req);
  13. if (tokenMethod === 'cookie') {
  14. return tokenFromCookie;
  15. } else if (tokenMethod === 'bearer') {
  16. return tokenFromHeader;
  17. }
  18. if (tokenMethod.includes('cookie') && tokenFromCookie) {
  19. return tokenFromCookie;
  20. }
  21. if (tokenMethod.includes('bearer') && tokenFromHeader) {
  22. return tokenFromHeader;
  23. }
  24. }
  25. function getFromCookie(req: Request): string | undefined {
  26. if (req.session && req.session.token) {
  27. return req.session.token;
  28. }
  29. }
  30. function getFromHeader(req: Request): string | undefined {
  31. const authHeader = req.get('Authorization');
  32. if (authHeader) {
  33. const matches = authHeader.trim().match(/^bearer\s(.+)$/i);
  34. if (matches) {
  35. return matches[1];
  36. }
  37. }
  38. }