2017-11-15 3 views
3

In Symfony 4, die AuthenticatorInterface::supports() Methode hat den folgenden Kommentar:Was ist der Zweck der AuthenticatorInterface :: supports() -Methode?

interface AuthenticatorInterface extends AuthenticationEntryPointInterface 
{ 
    /** 
    * Does the authenticator support the given Request? 
    * 
    * If this returns false, the authenticator will be skipped. 
    * 
    * @param Request $request 
    * 
    * @return bool 
    */ 
    public function supports(Request $request); 

ich die Formulierung verwirrend finden. Mein erster Instinkt, als ich versuchte, dies zu implementieren, war, wahr zurückzugeben, wenn die Anfrage ein Feld username und password enthält, aber dann erinnerte ich mich, dass alle Anfragen, die ich erhalte, authentifiziert werden, auch wenn ich das Login-Formular nicht benutze.

Ist die supports() Methode eine Möglichkeit, das security.firewalls.myFirewall.pattern Argument zu übersteuern? Ist es eine Sache, die den Fluss zwischen mehreren Authentifikatoren behandelt?

Wie soll ich diese Schnittstelle benutzen?

Antwort

1

Ich stimme zu, dass diese Funktion (noch) nicht so gut dokumentiert ist. Das einzige, was ich finden kann, ist dies:

How to Create a Custom Authentication System with Guard

Stützen (Request $ Anfrage)

Diese bei jeder Anfrage aufgerufen wird, und Ihre Aufgabe ist es, zu entscheiden, ob der Authenticator sollte für diese Anfrage (true) verwendet werden oder wenn es übersprungen werden sollte (Rückgabe false).

Zum Beispiel: Sie Request können Sie überprüfen, ob es ein XMLHttpRequest (AJAX) ist, so dass Sie AjaxAuthenticator gewidmet haben.

Eine ähnliche Funktion (VoterInterface::support()) ist bei How to Use Voters to Check User Permissions dokumentiert.

+2

Nach dem Quellcode ein bisschen mehr zu lesen, das ist meine Vermutung als gut. Es sieht so aus, als würde es verwendet werden, wenn wir mehrere Authenticators innerhalb einer bestimmten Firewall haben. – Loupax

+1

Nachdem ich die Dokumente ein wenig mehr ausgegraben habe, habe ich folgendes gefunden: https://symfony.com/blog/new-in-symfony-3-4-guard -authentication-improvements Das klingt so, als würden wir nur dann true zurückgeben, wenn der Benutzer das Anmeldeformular einreicht. – Loupax

+0

Sie sollten eine Antwort mit dem Inhalt Ihres Kommentars geschrieben haben. Ich habe sie nicht gesehen, bevor ich meins geschrieben habe, aber du hattest eine gute Erklärung! – AlterPHP

0

Diese Schnittstelle ersetzt GuardAuthenticationInterface, die in Symfony 3.4 veraltet ist und aus Symfony 3.4 entfernt wurde.

Dieser Unterschied ist, dass die ehemalige GuardAuthenticationInterface nur eine getCredentials Methode definiert, die NULL oder jede Form von Anmeldeinformationen zurückgibt. In einigen Fällen gibt es viele Möglichkeiten, die Anmeldeinformationen für einen Authentifikator abzurufen, die getCredentials-Methode wurde auf beliebige Weise verarbeitet, bis etwas zurückgegeben wird oder endet, ohne etwas zurückzugeben (das entspricht fast einer Nullrückgabe).

Wenn Sie mehrere Authentifikatoren verwenden, möchten Sie nicht warten, bis alle zurückgegeben werden. So dass diese supports Methode erschien, um zurückzugeben, ob, ja oder nein, muss der Authentifikator getCredentials Methode aufgerufen werden. Beachten Sie, dass in der neuen AuthenticationInterface, getCredentials Methode immer etwas zurückgegeben werden soll.

Hier an article from Symfony's blog that describes the move ist