Qualcuno può spiegare Laravel 5.2 Multi Auth con l’esempio

Quello che ho fatto finora.
Sto cercando di autenticare gli utenti e l’ amministratore rispettivamente dalla tabella user e dalla tabella admin .
Sto usando il modello User come fornito da laravel out of the box e creato esattamente lo stesso per Admin .
Ho aggiunto una chiave di guardia e la chiave del provider in auth.php

guardie

 'guards' => [ 'user' =>[ 'driver' => 'session', 'provider' => 'user', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admin', ], ], 

provider

 'providers' => [ 'user' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admin' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ] ], 

Itinerari

 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]'); }); 

Ho creato una directory chiamata AuthAdmin dove sono presenti i file di default di AuthController.php e PasswordController.php AuthController.php . (Spazio dei nomi modificato di conseguenza)

    Prima di tutto nei documenti di Laravel ho menzionato che specificare la protezione personalizzata durante l’autenticazione come questa che non funziona.
    inserisci la descrizione dell'immagine qui

    C’è un altro metodo menzionato nei documenti di laravel per usare una guardia che non funziona.

    inserisci la descrizione dell'immagine qui

    Sarebbe molto utile se qualcuno potesse risolvere i problemi e correggermi se sbaglio.

    Dopo molte ricerche e molte domande e risposte sono finalmente riuscito a lavorare su Laravel 5.2 Multi Auth con due tabelle, quindi sto scrivendo la risposta alla mia domanda.

    Come implementare Multi Auth in Larvel 5.2

    Come menzionato sopra. Due admin e users tabelle

    Laravel 5.2 ha un nuovo comando artisan .

    php artisan make:auth

    genererà il route accesso / registrazione di base, la view e il controller per user tabella user .

    Crea una tabella di admin come tabella users per semplicità.

    Controller per Admin
    app/Http/Controllers/AdminAuth/AuthController
    app/Http/Controllers/AdminAuth/PasswordController
    (nota: ho appena copiato questi file da app/Http/Controllers/Auth/AuthController qui)

    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

    Aggiungi due metodi e specifica $redirectTo e $guard

     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'); } 

    ti aiuterà ad aprire un altro modulo di accesso per l’amministratore

    creando un middleware per l’ 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); } 

    }

    registra il middleware in kernel.php

      protected $routeMiddleware = [ 'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class, ]; 

    utilizzare questo middleware in AdminController , ad es.

     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'); } } 

    Questo è tutto il necessario per farlo funzionare e anche per ottenere json di uso amministratore autenticato
    Auth::guard('admin')->user()

    Modifica – 1
    Possiamo accedere direttamente all’utente autenticato usando
    Auth::user() ma se hai due tabelle di autenticazione devi usare

     Auth::guard('guard_name')->user() 

    per il logout

     Auth::guard('guard_name')->user()->logout() 

    per utente autenticato json

     Auth::guard('guard_name')->user() 

    Modifica 2

    Ora è ansible scaricare il progetto Laravel 5.2 Multiauth implementato http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/

    Nel caso in cui questo aiuti qualcuno, e questo potrebbe essere dovuto alla mia mancanza di comprensione del middleware, ecco cosa dovevo fare per farlo funzionare (oltre ai passi compiuti da @imrealashu) …

    In route.php :

     Route::get('/admin', [ 'middleware' => 'admin', 'uses' => '[email protected]' ]); 

    Questo è nel gruppo middleware web . Prima di questo ho provato a metterlo in un gruppo middleware admin separato e anche in un auth:admin group ma questo non ha funzionato, ha funzionato solo per me quando ho specificato il middleware come admin sulla route stessa. Non ho idea del perché questo sia, ma spero che gli altri non si tirino indietro i capelli come ho fatto io.

    In Laravel sono disponibili molti pacchetti di generatori di pannelli di amministrazione. Preferisco l’amministratore di Voyager. Installandoli facile e brezza. Potrebbe farti risparmiare tonnellate di codice. Hai solo bisogno di capire come funziona. Non reinventare la ruota.

    Voyager – The Missing Laravel Admin

    Un’applicazione Laravel con amministratore di avvio Gentelella admin.