csrf.js 791 B

123456789101112131415161718192021222324252627282930
  1. const { doubleCsrf } = require('csrf-csrf')
  2. module.exports = (ignoredMethods, excludeUrls) => {
  3. const {
  4. doubleCsrfProtection,
  5. validateRequest
  6. } = doubleCsrf({
  7. getSecret: () => process.env.SRU51,
  8. cookieName: '_csrf',
  9. getTokenFromRequest: (req) => req.body._csrf || req.headers['x-csrf-token'] || req.query._csrf,
  10. ignoredMethods,
  11. cookieOptions: {
  12. sameSite: 'lax',
  13. path: '/',
  14. secure: true
  15. },
  16. size: 32
  17. })
  18. return [
  19. (req, res, next) => {
  20. if (excludeUrls?.filter(
  21. (x) => x === req.originalUrl || (x.test && x.test(req.originalUrl))
  22. ).length > 0) next()
  23. else doubleCsrfProtection(req, res, next)
  24. }, (req, res, next) => {
  25. if (validateRequest(req)) res.clearCookie('_csrf')
  26. next()
  27. }
  28. ]
  29. }