Benutzerdefinierte Anmeldung mit einem dritten Parameter

8

Ich arbeite an einem relativ einfachen Anmeldesystem für Symfony2.

Ich habe die Grundlagen und arbeite gut.

Was dies ein bisschen besonders macht, ist, dass ich einen Weg finde, einen dritten Wert (einen Ökosystemwert) bereitzustellen. Die Benutzernamen in meiner Datenbank sind nicht für sich allein einzigartig, sondern bilden einzigartige Paare mit einem Ökosystemwert.

Der Ökosystemwert wird durch das Formular bereitgestellt, von dem aus sie sich anmelden.

Wie kann ich diesen Ökosystemwert bei der Anmeldung nutzen?

    
samanime 11.03.2012, 03:55
quelle

2 Antworten

6

Sehen Sie sich das Cookbook-Lernprogramm zu an, um Sicherheitsbenutzer aus der Datenbank zu laden (Entity Provider). - speziell der Teil über Authentifizieren Jemand mit einem benutzerdefinierten Entitätsanbieter .

In diesem Teil wird beschrieben, wie Sie UserProviderInterface so ändern / erstellen, dass Sie sich über eine E-Mail-Adresse oder einen Benutzernamen anmelden können. Offensichtlich ist dies nicht das, was Sie wollen, aber - es sollte relativ trivial sein, den Code so zu ändern, dass er auch nach Ihrem dritten Login-Parameter abfragt / validiert.

Idealerweise werden Sie wahrscheinlich Ihren eigenen UserProvider erstellen und zum Glück gibt es dafür ein Kochbuch-Tutorial: So erstellen Sie einen benutzerdefinierten Benutzeranbieter .

Update: Um die dritte Login-Option bearbeiten und an Ihre benutzerdefinierten Provider (oben erstellt) übergeben zu können, müssen Sie auch einen benutzerdefinierten Authentifizierungsanbieter erstellen. Sehen Sie sich (noch einen weiteren) Kochbuchartikel auf So erstellen Sie einen benutzerdefinierten Authentifizierungsanbieter an . Dieser Artikel ist für die Behandlung zusätzlicher Anforderungsheaderparameter für die Authentifizierung zugeschnitten, aber anhand dieses Beispiels sollten Sie Anforderungsheader für POST-Anforderungswerte austauschen können.

Verwenden Sie den Cookbook-Artikel, um zu verstehen, wie die Authentifizierung mit Symfony2 funktioniert, aber verwenden Sie (und erweitern Sie) die Benutzername / Passwort-Funktionalität von Symfony2 und fügen Sie einfach Ihren 3. Parameter hinzu. Einige Klassen zum Anschauen:

leek 11.03.2012, 19:19
quelle
0

Sie können einen benutzerdefinierten Passwortauthentifizierer (& gt; = Symfony 2.6) erstellen und Attribute dort festlegen :

  1. createToken (): Erzeuge das Token (du kannst UsernamePasswordToken verwenden) und setze das Attribut, nimm die benötigten Daten von $ request.
  2. authenticateToken (): Hier machen Sie etwas mit dieser dritten Variable ($ token- & gt; getAttribute ()). Wenn es loadUserByUsername betrifft, lesen Sie weiter unten.

In authenticateToken () haben Sie UserProvider und loadUserByUsername. Was ich getan habe, war mein Benutzeranbieter (der FOSUserBundle und Overrides erweitert die Methode) und übergeben Sie ein Array mit Benutzernamen und den anderen benötigten Daten. Vergessen Sie nicht zu überprüfen, was in loadUserByUsername übergeben wird (z. B. wenn es sich um eine Zeichenfolge handelt, dann rufen Sie parent :: loadUserByUsername auf).

Ich bin mir sicher, dass dieser Trick mit loadUserByUsername schlecht ist, aber ich weiß nicht, wie es sonst gemacht werden könnte.

    
Tsvetan Ovedenski 15.08.2015 15:14
quelle

Tags und Links