Zwei verschiedene Modelle für die Authentifizierung in Laravel 5.4

Lesezeit: 3 Minuten

Benutzer-Avatar
ABEntwickler

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.

Benutzer-Avatar
Abid Raza

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.

  1. 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',
        ];
    
    }
    
  2. 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);
  1. 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.

  1. 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');
    });
    
  2. 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()

  • Wenn Sie wissen, wie ich genau in Laravel 5.4 vorgehen kann, führen Sie mich bitte. Die im vorgeschlagenen Link beschriebene Lösung ist lang und hat viele Konfigurationen.

    – ABEntwickler

    5. November 2017 um 18:29 Uhr

  • Ich wollte, aber es ist genau die gleiche Antwort. Es wird so lange wie in der gegebenen Antwort sein. Ich werde versuchen, es in kurzen Schritten zu erklären, aber hier sind einige Tutorial-Links youtube.com/watch?v=iKRLrJXNN4M und expertphp.in/article/…

    – Abid Raza

    5. November 2017 um 18:49 Uhr

  • Aktualisierte Antwort mit den erforderlichen Schritten. Und ja, das ist auch eine lange Antwort. lol

    – Abid Raza

    5. November 2017 um 19:43 Uhr

  • @abid-reza, was ist, wenn ich auf angemeldete Benutzer über zugreifen möchte Auth::user()? in diesem fall muss ich in vielen situationen nachschauen Auth::user() für Normalanwender bzw Auth::guard('company')->user() für Firmenbenutzer, richtig?

    – ABEntwickler

    6. November 2017 um 16:10 Uhr

  • Entschuldigung für die späte Antwort. Ich habe nachgesehen, in config/auth.php können Sie im Standardarray sehen, gaurd => ‘web’ ist da. Sie müssen also Auth::guard(‘company’)->user() verwenden, um den Firmenbenutzer zu erhalten.

    – Abid Raza

    7. November 2017 um 18:18 Uhr

1014890cookie-checkZwei verschiedene Modelle für die Authentifizierung in Laravel 5.4

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy