Contao-Camp 2024
Ergebnis 1 bis 7 von 7

Thema: Cors (Cross Origin) für eigene Controller

  1. #1
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard Cors (Cross Origin) für eigene Controller

    Hallo,

    ich habe über die ContaoManager/Plugin.php eine geschützte Route mit Basic Auth:

    PHP-Code:
    $extensionConfig['firewalls'] = array_merge(
        \
    array_slice($extensionConfig['firewalls'], 0$offsettrue), [
            
    'app_api' => [
                
    'pattern' => '/api/basic_auth/*',
                
    'http_basic' => ['realm' => 'API'],
                
    'provider' => 'app.api_user_provider',
                
    'stateless' => true,
            ],
        ],
        \
    array_slice($extensionConfig['firewalls'], $offsetnulltrue)
    ); 
    kann jmd. helfen, wie ich bestmöglich den Access-Control-Allow-Origin Header setzen kann?

    Ich habe bereits mein $response in den Controllern angepasst und die Header dort hinzugefügt. Leider funktioniert die Einbindung der Routen unter /basic_auth/* erst, wenn ich die Header auch in der index.php im \web Verzeichnis hinzufüge. Sonst meckert er bei der OPTIONS Anfrage (preflight).

    Muss/kann ich die Header woanders definieren? z.B. bei den Firewall Regeln? Das Problem besteht lediglich bei der geschützten Route durch den Basic Auth, die anderen Routen laufen indem ich Header zum JsonResponse hinzufüge.

  2. #2
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.060
    Partner-ID
    10107

    Standard

    Über das Manager Plugin kannst du auch andere Bundles konfigurieren (https://docs.contao.org/dev/framewor...lugininterface) - wie das Nelmio Security Bundle.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    ah okay, kann ich das auch noch in der foreach machen?

    PHP-Code:
    foreach ($extensionConfigs as &$extensionConfig) {
                if (isset(
    $extensionConfig['firewalls'])) {

                    
    // ...

                    
    $offset = (int) array_search('contao_frontend'array_keys($extensionConfig['firewalls']), true);

                    
    $extensionConfig['firewalls'] = array_merge(
                        \
    array_slice($extensionConfig['firewalls'], 0$offsettrue), [
                            
    'app_api' => [
                                
    'pattern' => '/api/basic_auth/*',
                                
    'http_basic' => ['realm' => 'API'],
                                
    'provider' => 'app.api_user_provider',
                                
    'stateless' => true,
                            ],
                        ],
                        \
    array_slice($extensionConfig['firewalls'], $offsetnulltrue)
                    );

                    break;
                }

                if (isset(
    $extensionConfig['nelmio_cors'])) {
                        
    // config...
                
    }
            } 

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.060
    Partner-ID
    10107

    Standard

    Ich denke ja. Versuch's einfach
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    ich hab an der Stelle einfach mal

    PHP-Code:
    if ('nelmio_security' === $extensionName) {
        foreach (
    $extensionConfigs as &$extensionConfig) {
            if (isset(
    $extensionConfig['nelmio_cors'])) {
                
    $extensionConfig['nelmio_cors']['paths']['^/api/'] = [
                    
    'allow_origin' => '*',
                    
    'allow_headers' => '*',
                    
    'allow_methods' => '*',
                ];
            }
        }

    hinzugefügt. Leider hat das keine Auswirkungen, habe ich etwas falsch gemacht?

  6. #6
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.060
    Partner-ID
    10107

    Standard

    Das isset muss vermutlich raus, weil wenn kein anderes Bundle und auch nicht deine Applikation an sich etwas konfiguriert hat, wird es keinen bestehenden Eintrag geben.
    » sponsor me via GitHub or PayPal or Revolut

  7. #7
    Contao-Nutzer
    Registriert seit
    30.07.2015.
    Beiträge
    140

    Standard

    danke, das wars So funktioniert es:

    PHP-Code:
    if ('nelmio_cors' === $extensionName) { // nelmio_security
        
    foreach ($extensionConfigs as &$extensionConfig) {
                
    $extensionConfig['defaults'] = [
                    
    'allow_origin' => [],
                    
    'allow_headers' => [],
                    
    'allow_methods' => [],
                    
    'max_age' => 3600
                
    ];
                
    $extensionConfig['paths']['^/api/basic_auth/'] = [
                    
    'allow_origin' => ['*'],
                    
    'allow_headers' => ['Content-Type''Authorization'],
                    
    'allow_methods' => ['GET''OPTIONS''POST''PUT''PATCH''DELETE'],
                    
    'max_age' => 3600
                
    ];
        }


Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •