CakePHP Auth Komponente mit 2 Tabellen

8

CakePHP Version 1.2.5

Ich möchte, dass ein einzelner Benutzer mehrere E-Mail-Adressen hat.
Ich möchte, dass ein einzelner Benutzer ein einziges Passwort hat.
Ich möchte, dass sich Benutzer mit einer ihrer mehreren E-Mail-Adressen und ihrem einzigen Passwort anmelden.

Ich habe eine Benutzertabelle mit einer ID und einem Passwortfeld erstellt.
Ich habe eine user_email_addresses-Tabelle mit einem ID-Feld ein user_id-Feld und ein email_address-Feld erstellt.

Frage:
Wie ändere ich die Auth-Komponente minimal, um in diesem Fall nach "Benutzername", "email_address", in der Tabelle "user_email_addresses" und nach "password" in der Benutzertabelle zu suchen?

Scheint so, als ob das Ändern der Identifizierungsmethode in der Auth-Komponente dies tun könnte. Aber ich denke, dass das Ändern der Auth-Komponente direkt eine schlechte Idee ist - irgendwelche Ideen, wie man die Identifizierungsmethode erweitern und möglicherweise noch modifizieren kann? Ссылка oder möglicherweise ein anderes authentifiziertes Objekt vorschlagen?

Startzeile 774:

%Vor%     
BWelfel 05.11.2009, 00:04
quelle

1 Antwort

8

AuthComponent::identify() benötigt zwei Parameter, $user und $conditions

%Vor%

Wenn Sie das obige Snippet betrachten, übergeben Sie false als $conditions und die Methode wird ohne Modellbedingungen ausgeführt.

Betrachtet man auch den Rest des Codes, wird, wenn man einen $user -Wert vom Typ string übergibt, der meiste benutzerbezogene Code nicht ausgeführt, bis er hier angekommen ist:

%Vor%

Hier läuft Model::escapeField() , ohne Parameter, die eine maskierte Version von User.id (standardmäßig) zurückgibt und dieses Feld auf die übergebene Zeichenfolge abbildet. Diese wird dann mit dem $conditions -Array und zusammengeführt Führt Model::find() aus.

Es sollte sicher gesagt werden, dass, wenn die Zeichenfolge die ID des Benutzers ist und keine Bedingungen vorliegen, die Person mit dieser ID jedes Mal gefunden wird.

Daher sollten Sie AuthComponent erweitern können, um das zu tun, was Sie wollen:

%Vor%

Sie müssen alle Verweise auf Auth durch AppAuth in Ihrer Anwendung ersetzen, es sei denn, Sie folgen dieser praktischer Tipp (der Ansatz in den Kommentaren ist nett).

    
deizel 09.11.2009, 15:39
quelle