Ich versuche, die users - und admin - Form user
-Tabelle bzw. admin
-Tabelle zu authentifizieren. Ich verwende das Modell User
, wie es von laravel zur Verfügung gestellt wird, und erstellte dasselbe für Admin.
. Ich habe einen Sicherheitsschlüssel und einen Providerschlüssel in auth.php.
hinzugefügt.
Guards
'guards' => [
'user' =>[
'driver' => 'session',
'provider' => 'user',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
Anbieter
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
],
Routen
Route::group(['middleware' => ['web']], function () {
// Login Routes.
Route::get('/admin/login','AdminAuth\[email protected]');
Route::post('/admin/login','AdminAuth\[email protected]');
Route::get('/admin/logout','AdminAuth\[email protected]');
// Registration Routes.
Route::get('admin/register', 'AdminAuth\[email protected]');
Route::post('admin/register', 'AdminAuth\[email protected]');
Route::get('/admin', '[email protected]');
});
Ich habe ein Verzeichnis mit dem Namen AuthAdmin
erstellt, in dem die standardmäßigen AuthController.php
- und PasswordController.php
-Dateien von Laravel vorhanden sind. (Namensraum entsprechend geändert)
Zuallererst erwähnte Laravel in seinen Dokumenten, wie man einen benutzerdefinierten Schutz angibt, während man sich wie folgt authentifiziert, was nicht funktioniert.
Es gibt eine andere Methode, die in Laravels Dokumenten erwähnt wird, um eine Wache zu verwenden, die auch nicht funktioniert.
Es wäre von Vorteil, wenn jemand die Probleme lösen und mich korrigieren könnte, wenn ich falsch liege.
Nach vielem Graben und vielen Fragen und Antworten habe ich es endlich geschafft, Laravel 5.2 Multi Auth with two table, also schreibe ich eine Antwort auf meine eigene Frage.
So implementieren Sie Multi Auth in Larvel 5.2
Wie oben erwähnt. Zwei Tabellen admin
und users
Laravel 5.2 hat einen neuen artisan
Befehl.
php artisan make:auth
es werden grundlegende Login/Register route
, view
und controller
für die Tabelle user
generiert.
Erstellen Sie der Einfachheit halber eine admin
- Tabelle als users
- Tabelle.
Controller für Admin app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(Hinweis: Ich habe gerade diese Dateien von app/Http/Controllers/Auth/AuthController
hierher kopiert)
config/auth.php
//Authenticating guards
'guards' => [
'user' =>[
'driver' => 'session',
'provider' => 'user',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
],
//User Providers
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
],
//Resetting Password
'passwords' => [
'clients' => [
'provider' => 'client',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admin',
'email' => 'auth.emails.password',
'table' => 'password_resets',
'expire' => 60,
],
],
route.php
Route::group(['middleware' => ['web']], function () {
//Login Routes...
Route::get('/admin/login','AdminAuth\[email protected]');
Route::post('/admin/login','AdminAuth\[email protected]');
Route::get('/admin/logout','AdminAuth\[email protected]');
// Registration Routes...
Route::get('admin/register', 'AdminAuth\[email protected]');
Route::post('admin/register', 'AdminAuth\[email protected]');
Route::get('/admin', '[email protected]');
});
AdminAuth/AuthController.php
Fügen Sie zwei Methoden hinzu und geben Sie $redirectTo
Und $guard
An.
protected $redirectTo = '/admin';
protected $guard = 'admin';
public function showLoginForm()
{
if (view()->exists('auth.authenticate')) {
return view('auth.authenticate');
}
return view('admin.auth.login');
}
public function showRegistrationForm()
{
return view('admin.auth.register');
}
es wird Ihnen helfen, ein anderes Anmeldeformular für den Administrator zu öffnen
Erstellen einer Middleware für admin
class RedirectIfNotAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = 'admin')
{
if (!Auth::guard($guard)->check()) {
return redirect('/');
}
return $next($request);
}
}
middleware registrieren in kernel.php
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
];
verwenden Sie diese Middleware in AdminController
, z.
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
class AdminController extends Controller
{
public function __construct(){
$this->middleware('admin');
}
public function index(){
return view('admin.dashboard');
}
}
Das ist alles, was benötigt wird, um es zum Laufen zu bringen und um die authentifizierte Admin-Nutzung zu erlangenAuth::guard('admin')->user()
Bearbeiten - 1
Wir können direkt über auf authentifizierte Benutzer zugreifenAuth::user()
aber wenn Sie zwei Authentifizierungstabellen haben, müssen Sie verwenden
Auth::guard('guard_name')->user()
zum ausloggen
Auth::guard('guard_name')->user()->logout()
für authentifizierte Benutzer json
Auth::guard('guard_name')->user()
Jetzt können Sie Laravel 5.2 Multiauth implementiertes Projekt http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/ herunterladen =
Für den Fall, dass dies jemandem hilft, und dies kann nur an meinem mangelnden Verständnis der Middleware liegen, musste ich Folgendes tun, damit dies funktioniert (zusätzlich zu den von @imrealashu ausgeführten Schritten) ...
Im route.php
:
Route::get('/admin', [
'middleware' => 'admin',
'uses' => '[email protected]'
]);
Dies ist in der Middleware-Gruppe web
. Vorher habe ich versucht, es in eine separate admin
Middleware-Gruppe und sogar in eine auth:admin
group hat aber nicht funktioniert, es hat nur bei mir funktioniert, als ich die Middleware als admin auf der Route selbst angegeben habe. Ich habe keine Ahnung, warum das so ist, aber ich hoffe, es rettet andere davon, sich die Haare auszureißen, wie ich es getan habe.
Es ist sehr einfach in Laravel 5.6. Gehen Sie einfach zu config/auth.php
und fügen Sie diese Zeile im providers
-Array hinzu:
'admins' => [
'driver' => 'database',
'table' => 'admin_table'
]
Beachten Sie, dass wir database
für den Treiber nicht eloquent
verwendet haben.
Fügen Sie dies dem guards
-Array hinzu:
'admin_guard' => [
'driver' => 'session',
'provider' => 'admins'
]
Jetzt sind wir fertig! Verwenden Sie dies, wenn Sie mit Admins-Tabelle arbeiten:
Auth::guard('admin_guard')->User();
Prost.