2015-06-27 3 views
6

Ich versuche zu verhindern Umleitung zu Login-Seite, wenn der Benutzer versucht, auf eine Seite ohne Token zuzugreifen, habe ich einzelne Seite App und ich stelle nur die Ajax-Anfragen unter Firewall und wenn a Benutzer tut ajax ohne Token ich die aJAX wollen verboten Ausnahme zurückkehren, so kann ich es in Client-Seite, da die Anforderung an die Login-Seite umgeleitet wirdsymfony2 security - Login Pfad deaktivieren und show disabled

derzeit die ajax-returns „gefunden“ fangen

Ich habe bisher keine Lösung im Kochbuch gefunden. Ich möchte keine API-Token verwenden, sondern nur eine Ausnahme senden, anstatt zur Anmeldung zurückzukehren.

Antwort

7

Sie müssen einen entry_point für Ihre Firewall definieren, damit Sie eine nicht autorisierte Antwort zurückgeben können. Informationen zu Einstiegspunkten finden Sie in der Dokumentation here. Ich werde den Absatz im Falle zukünftiger Anfragen hier kopieren.

Wenn der Benutzer überhaupt nicht authentifiziert ist (d. H. Wenn der Tokenspeicher noch kein Token hat), wird der Einstiegspunkt der Firewall aufgerufen, um den Authentifizierungsprozess zu starten. Ein Einstiegspunkt sollte AuthenticationEntryPointInterface implementieren, das nur eine Methode hat: start(). Diese Methode empfängt das aktuelle Request-Objekt und die Ausnahme, durch die der Ausnahme-Listener ausgelöst wurde. Die Methode sollte ein Response-Objekt zurückgeben. Dies kann zum Beispiel die Seite sein, die das Login-Formular enthält, oder, im Falle der Basic-HTTP-Authentifizierung, eine Antwort mit einem WWW-Authenticate-Header, der den Benutzer auffordert, seinen Benutzernamen und sein Passwort einzugeben.

Damit Sie dies tun können, müssen Sie eine Klasse erstellen, die als Dienst definiert wird.

Es soll wie folgt aussehen:

namespace MyBundle\Service; 

use Symfony\Component\HttpFoundation\Request; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Security\Http\EntryPoint\AuthenticationEntryPointInterface; 
use Symfony\Component\Security\Core\Exception\AuthenticationException; 

class CustomEntryPoint implements AuthenticationEntryPointInterface 
{ 

    public function start(Request $request, AuthenticationException $authException = null) 
    { 
     $response = new Response("", Response::HTTP_UNAUTHORIZED); 

     return $response; 
    } 

} 

Und in Ihrer services.yml Datei

services: 
    service.entry_point: 
     class: MyBundle\Service\CustomEntryPoint 

Und schließlich die Service-ID service.entry_point auf Ihre entry_point Option in firewall Abschnitt security.yml Datei übergeben.

Dies sollte den Trick tun.

+0

Ist es möglich, Auth mit 'entry_point' zu deaktivieren? –

Verwandte Themen