Suche…


Multi-Authentifizierung

Mit Laravel können Sie mehrere Authentifizierungstypen mit bestimmten Schutzvorrichtungen verwenden.

In Laravel 5.3 unterscheidet sich die Mehrfachauthentifizierung nur wenig von Laravel 5.2

Ich werde in 5.3 erläutern, wie Sie die Multiauthentication-Funktion implementieren

Zunächst benötigen Sie zwei verschiedene Benutzermodelle

cp App/User.php App/Admin.php

Ändern Sie den Klassennamen in Admin und legen Sie den Namespace fest, wenn Sie andere Modelle verwenden. es sollte aussehen

App \ Admin.php

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Admin extends Authenticatable
{
    use Notifiable;

    protected $fillable = ['name', 'email', 'password'];
    protected $hidden   = ['password', 'remember_token'];

}

Außerdem müssen Sie eine Migration für den Administrator erstellen

php artisan make:migration create_admins_table

Bearbeiten Sie dann die Migrationsdatei mit den Inhalten der Standardbenutzermigration. Sieht aus wie das

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAdminsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');        
            $table->rememberToken();
            $table->timestamps();

            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('admins');
    }
}

edit config / auth.php

'guards'    => [
        'web'   => [
            'driver'   => 'session',
            'provider' => 'users',
        ],

        'api'   => [
            'driver'   => 'token',
            'provider' => 'users',
        ],
        //Add Admin Guard
        'admin' => [
            'driver'   => 'session',
            'provider' => 'admins',
        ],
    ],

und

'providers' => [
        'users'  => [
            'driver' => 'eloquent',
            'model'  => App\User::class,
        ],
        //Add Admins Provider
        'admins' => [
            'driver' => 'eloquent',
            'model'  => App\Admin::class,
        ],
    ],

Beachten Sie, dass wir zwei Einträge hinzufügen. Eine in Guards- Variable Eine in Provider- Variable.

Und so verwenden Sie den anderen Schutz dann "Web"

Meine App \ Http \ Controllers \ Admin \ LoginController

<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{

    use AuthenticatesUsers;

    protected $guard = 'admin';

    protected $redirectTo = '/admin/';

    public function showLoginForm()
    {
        return view('admin.login');
    }

    protected function guard()
    {
        return Auth::guard($this->guard);
    }

}

das bedarf wenig Erklärung.

Kurz gesagt, mit Auth :: guard ('admin') können Sie auth-Methoden (wie login, logout, register etc.) mit Ihrem admin guard verwenden.

Zum Beispiel

Auth::guard('admin')->login($user)

sucht $ user in der admins-Tabelle und loggt sich mit dem Benutzer ein

Auth::login($user)

wird normalerweise mit Benutzertabelle arbeiten. Standardschutz ist in config / Auth.php mit Standardwerten Array angegeben. In frischem Laravel ist es "Web".

Im Controller müssen Sie Methoden von AuthenticatesUsers implementieren, um Ihre benutzerdefinierten Ansichtspfade anzuzeigen. Und Sie müssen andere Funktionen wie Guard implementieren, um Ihre neuen Benutzer-Guards verwenden zu können.

In diesem Beispiel lautet mein Administrator-Login admin / login.blade

Durch die Implementierung der guard () - Funktion zur Rückgabe von Auth :: guard ('admin') funktionieren alle AuthenticatesUsers-Merkmalsmethoden mit dem "admin" - Guard.

In früheren Versionen von Laravel unterscheidet sich dies kaum von 5.3

In 5.2 gibt die getGuard-Funktion die Variable $ guard aus der Klasse und der Hauptfunktion (login) zurück

Auth::guard($guard)->attempt(...)

In 5.3 gibt die guard-Funktion ganze Auth :: guard () zurück und die main-Funktion benutzt sie wie

$this->guard()->attempt(...)


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow