PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

Magento 2 błąd CSRF token w AJAX i REST API – sesje i nagłówki

by Henryk Tews / środa, 15 lipca 2026 / Opublikowano w Magento / Adobe Commerce

Niestandardowe formularze w sklepie przestały działać po aktualizacji Magento. Błąd „Invalid Form Key” w logach. Własne endpointy AJAX rzucały wyjątek CSRF przy każdym żądaniu. Czas naprawy: 2 godziny.

Objawy

  • Formularze zwracają błąd „Invalid Form Key. Please refresh the page.”
  • AJAX POST do własnych controllerów kończy się przekierowaniem lub 403
  • Problem pojawił się po aktualizacji Magento do 2.4.x
  • W logach: Invalid Form Key. Please refresh the page

Rozwiązanie

<?php
// Opcja A: Implementuj CsrfAwareActionInterface
class MyController extends \Magento\Framework\App\Action\Action
    implements \Magento\Framework\App\CsrfAwareActionInterface
{
    public function createCsrfValidationException(
        \Magento\Framework\App\RequestInterface $request
    ): ?\Magento\Framework\App\Request\InvalidRequestException {
        return null; // nie rzucaj wyjątku, obsłuż sam
    }

    public function validateForCsrf(
        \Magento\Framework\App\RequestInterface $request
    ): ?bool {
        // Własna walidacja - np. API key w nagłówku
        $apiKey = $request->getHeader('X-Api-Key');
        return $apiKey === $this->config->getApiKey();
    }

    public function execute()
    {
        // Twoja logika
    }
}

// Opcja B: Dodaj form_key do AJAX requestu
// W szablonie Magento:
// <input type="hidden" name="form_key" value="<?= $block->getFormKey() ?>"/>
// JavaScript - dodaj form_key do każdego AJAX POST
require(['jquery', 'mage/cookies'], function($) {
    $(document).ajaxSend(function(event, xhr, settings) {
        if (settings.type === 'POST') {
            var formKey = $.mage.cookies.get('form_key');
            if (formKey && settings.data) {
                settings.data += '&form_key=' + formKey;
            }
        }
    });
});

Wnioski

CSRF ochrona w Magento 2.4+ jest domyślnie włączona dla wszystkich controllerów. Własne endpointy wymagają albo dołączenia form_key do żądania albo implementacji CsrfAwareActionInterface z własną logiką walidacji (np. API key, JWT token).

About Henryk Tews

Co możesz przeczytać następne

AI-assisted optymalizacja SQL – LLM + EXPLAIN + Blackfire, 5x przyspieszenie
Magento 2 – wyczerpanie pamięci przy imporcie produktów (memory limit)
Optymalizacja wydajności – OPcache, Redis, N+1 queries, Blackfire, tabela priorytetów
  • Publikacje
  • O autorze
  • Kontakt

© 2026 Created by

GÓRA
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Zawsze aktywne
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Zarządzaj opcjami
  • Zarządzaj serwisami
  • Zarządzaj {vendor_count} dostawcami
  • Przeczytaj więcej o tych celach
Zobacz preferencje
  • {title}
  • {title}
  • {title}