wake-up-neo.net

Kann jeder Laravel 5.2 Multi Auth mit Beispiel erklären

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.
 enter image description here

Es gibt eine andere Methode, die in Laravels Dokumenten erwähnt wird, um eine Wache zu verwenden, die auch nicht funktioniert. 

 enter image description here

Es wäre von Vorteil, wenn jemand die Probleme lösen und mich korrigieren könnte, wenn ich falsch liege.

159
imrealashu

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 erlangen
Auth::guard('admin')->user()

Bearbeiten - 1
Wir können direkt über auf authentifizierte Benutzer zugreifen
Auth::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()  

Bearbeiten 2

Jetzt können Sie Laravel 5.2 Multiauth implementiertes Projekt http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/ herunterladen =

195
imrealashu

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.

2
Sworrub Wehttam

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.

0
Sky