Angenommen, ich habe zwei verschiedene Modelle und Tabellen benannt user
und company
.
Wie Sie wissen, verwendet Laravel User
Modell zum Verwalten der Authentifizierung. aber weil ich zwei verschiedene Modelle habe, die ich möchte, kann ich sie separat verwalten.
Ich verwende Laravel 5.4 und weiß nicht, wie das geht.
Wenn Sie über ein Mehrfachauthentifizierungssystem sprechen, müssen Sie mehrere erstellen Wachen um das zu erreichen.
Es gibt eine schöne Antwort auf dieselbe Frage.
Kann jemand Laravel 5.2 Multi Auth anhand eines Beispiels erklären
Es befindet sich auf Laravel 5.2, kann aber problemlos auf Laravel 5.4 implementiert werden.
-
Erstellen Sie ein Modell App\Unternehmen was sich erstreckt Authentifizierbare Klasse. Dieses Modell wird als Benutzermodell funktionieren, das wird Unternehmen Wache (im nächsten Schritt)
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Company extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
-
Erstellen Sie einen Wächter und einen Anbieter für das Modell App\Unternehmen.
// Authenticating guards and providers
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'company' => [
'driver' => 'session',
'provider' => 'company',
],
],
// Providers
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'company' => [
'driver' => 'eloquent',
'model' => App\Company::class,
]
],
Jetzt können Sie Benutzer nach den verschiedenen Wachen finden.
$user = Auth::guard('company')->user();
// Or...
$user = auth()->guard('company')->user();
dd($user);
-
Erstellen Sie nun den Auth-Controller für das Unternehmen App\Http\Controllers\Auth\CompanyLoginController gleich wie Auth\LoginController. Angeben $redirectTo und bewachen
//Auth\ComapnyLoginController.php
protected $redirectTo = '/comapany';
protected $guard = 'comapany';
public function showLoginForm()
{
if (view()->exists('auth.authenticate')) {
return view('auth.authenticate');
}
return view('comapany.auth.login');
}
Erstellen Sie jetzt ein Anmeldeformular für den Benutzer – company.auth.login-Ansicht wie das Anmeldeformular des Benutzers.
-
Erstellen Sie nun Routen
//Login Routes...
Route::group(['prefix'=>'company', 'middleware'=>'company'], function(){
Route::get('/login','Auth\CompanyLoginController@showLoginForm');
Route::post('/login','Auth\CompanyLoginController@login');
// ...
// rest of the company dashboard and other links
// ...
Route::get('/logout','Auth\CompanyLoginController@logout');
});
-
Erstellen Sie eine Middleware für Unternehmen
class RedirectIfNotCompany
{
/**
* 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 = 'company')
{
if (!Auth::guard($guard)->check()) {
return redirect("https://stackoverflow.com/");
}
return $next($request);
}
}
und registrieren Sie es in kernal.php
protected $routeMiddleware = [
'company' => \App\Http\Middleware\RedirectIfNotCompany::class,
];
Und das ist alles, was Sie brauchen. Greifen Sie auf den Benutzer mit dem Namen des Wächters zu
Auth::guard('company')->user()