Authentifizierung mit 2 verschiedenen Tabellen
Brauche ich zum erstellen einer neuen "auth" config mit einem anderen Tisch und Benutzer. Ich habe eine Tabelle für den "admin" Benutzer und eine weitere Tabelle für die normalen Benutzer.
Aber wie kann ich das erstellen einer anderen Instanz von Auth
mit einer anderen Konfiguration?
InformationsquelleAutor der Frage Carlos Goce | 2013-09-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie "emulieren" eine neue Auth-Klasse.
Laravel Auth-Komponente ist im Grunde die
Illuminate\Auth\Guard
Klasse, und diese Klasse haben einige Abhängigkeiten.So, im Grunde müssen Sie erstellen eine neue Wache-Klasse und Fassaden...
... fügen Sie eine
ServiceProvider
zu initialisieren dieser Klasse, und übergeben Sie die Abhängigkeiten.In diesem Service-Provider, habe ich einige Beispiel dafür, wie man eine 'neue' Passwort-Erinnerung-Komponente.
Nun müssen Sie zum erstellen von zwei neuen Fassaden, eine für die Authentifizierung und eins für Passwort-Erinnerungen.
...
Natürlich für Passwort-Erinnerungen, die Sie brauchen, um die Tabelle zu erstellen in der Datenbank, um zu arbeiten. In diesem Beispiel wird der name der Tabelle sollte
client_reminders
wie Sie sehen können, in derregisterReminderDatabaseRepository
Methode in der Service-Anbieter. Die Struktur der Tabelle ist der gleiche wie der original-Erinnerungen-Tabelle.Danach können Sie mit Ihrem
ClientAuth
die gleiche Art und Weise nutzen Sie dieAuth
Klasse. Und das gleiche fürClientPassword
mit derPassword
Klasse.Vergessen Sie nicht, fügen Sie Ihrem service-provider an den service-Anbieter-Liste in der
app/config/app.php
Datei.UPDATE:
Wenn Sie mit Laravel 4.1, die PasswordBroker muss nicht die
Redirect
Klasse mehr.UPDATE 2
Laravel 5.2 nur eingeführt multi-authso dass diese nicht mehr benötigt bei dieser version.
InformationsquelleAutor der Antwort Luis Dalmolin
Beim Versuch, dieses problem zu lösen mich, ich fand einen viel einfacheren Weg. Ich im Grunde erstellt eine benutzerdefinierte ServiceProvider, um ersetzen Sie die Standard-Auth ein, die dient als eine factory-Klasse für Auth, und ermöglicht es Ihnen, mehrere Instanzen für mehrere login-Typen. Auch ich steckte Sie alle in einem Paket, die Sie hier finden: https://github.com/ollieread/multiauth
Es ist ziemlich einfach, um wirklich zu nutzen, ersetzen Sie einfach die AuthServiceProvider in app/config/app.php mit Ollieread\Multiauth\MultiauthServiceProvider, dann ändern app/config/auth.php Aussehen:
Jetzt können Sie nur verwenden, Auth die gleiche Weise wie zuvor, aber mit einem kleinen Unterschied:
Ermöglicht es auch, Sie eingeloggt sein, wie mehrere Benutzer-Typen gleichzeitig die Voraussetzung für ein Projekt, das ich arbeiten war. Hoffe es hilft jemand anderem als mir.
UPDATE - 27/02/2014
Für diejenigen von Euch, die gerade erst über diese Antwort, ich habe gerade vor kurzem Hinzugefügt-Unterstützung für Erinnerungen, die zugegriffen werden kann, die in der gleichen Fabrik Stil Weg.
InformationsquelleAutor der Antwort ollieread
Ok, ich hatte das gleiche problem und hier ist, wie ich es gelöst:
tatsächlich in laravel 4 können Sie ändern Sie einfach die auth-configs zur Laufzeit so um den trick zu tun, können Sie tun Sie einfach Folgendes in Ihre App::vor-filter:
dadurch wird der Auth-Komponente th Admin-Modell, wenn im admin-urls. aber dies führt zu einem neuen problem, da die login-session-key ist der gleiche, wenn Sie haben zwei Benutzer in Ihre Administratoren und Benutzer-Tabelle mit der gleichen id können Sie login auf der admin-Seite, wenn Sie sich angemeldet haben, bevor Sie als normaler Benutzer! so machen Sie die zwei verschiedenen authetications völlig unabhängig, ich habe dieses trick:
und ändern Sie die App::before-code:
können Sie sehen, dass ich einen neuen auth-Treiber und schrieb einige Methoden, auf die Guard-Klasse, so wird es erzeugt verschiedene session-keys für die admin-site. dann änderte ich den Treiber für die admin-site. viel Glück.
InformationsquelleAutor der Antwort Amir
Ich hatte das gleiche problem gestern auch, und ich landete eine viel einfachere Lösung.
Meine Anforderungen, wenn von 2 verschiedenen Tabellen in zwei verschiedenen Datenbanken. Ein Tisch war für admins, die andere war für den normalen Benutzer. Auch, jeder Tisch hatte seine eigene Art und Weise der Vermischung. Ich landete mit dem folgenden Code (auch als gist auf Github: https://gist.github.com/Xethron/6790029)
Erstellen Sie eine neue UserProvider. Ich rief mir MultiUserProvider.php
Dann erzählte ich Laravel über meine UserProvider durch hinzufügen der folgenden Zeilen an den Anfang der meine
app/start/global.php
Datei.Und dann habe ich gesagt, Laravel, um meine Benutzer-provider anstelle von EloquentUserProvider in
app/config/auth.php
Wenn ich jetzt authentifizieren, ich mache es so:
Klasse wäre dann verwenden Sie die joomlaUser Modell, mit dem joomlaHasher, und keine Optionen für die hasher... Wenn die mit 'anderen' Anbieter, so wird es unter anderem Optionen für die hasher.
Diese Klasse wurde gebaut, für das, was ich erforderlich, kann aber leicht geändert werden, um suite Ihre Bedürfnisse.
PS: Stellen Sie sicher, dass der autoloader finden MultiUserProvider, sonst funktioniert es nicht.
InformationsquelleAutor der Antwort Xethron
Bin ich mit Laravel 5 native auth, um mehrere Benutzer-Tabellen...
Es ist nicht schwer, bitte überprüfen Sie diese Zusammenfassung:
https://gist.github.com/danielcoimbra/64b779b4d9e522bc3373
UPDATE: Für Laravel 5, wenn Sie brauchen eine robuste Lösung, versuchen Sie dieses Paket:
https://github.com/sboo/multiauth
Daniel
InformationsquelleAutor der Antwort Daniel Cintra