Szukaj…


Multi Authentication

Laravel pozwala korzystać z wielu typów uwierzytelniania z określonymi zabezpieczeniami.

W laravel 5.3 wielokrotne uwierzytelnianie niewiele różni się od Laravel 5.2

Wyjaśnię, jak zaimplementować funkcję uwierzytelniania wieloetapowego w 5.3

Najpierw potrzebujesz dwóch różnych modeli użytkowników

cp App/User.php App/Admin.php

zmień nazwę klasy na Administrator i ustaw przestrzeń nazw, jeśli używasz innych modeli. powinno to wyglądać

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

}

Musisz także utworzyć migrację dla administratora

php artisan make:migration create_admins_table

następnie edytuj plik migracji z zawartością domyślnej migracji użytkownika. Wygląda tak

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

edytuj config / auth.php

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

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

i

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

Zauważ, że dodajemy dwa wpisy. jedna zmienna wartowników jedna zmienna dostawców .

I w ten sposób używasz drugiego strażnika, a potem „sieci”

Moja aplikacja \ 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);
    }

}

to wymaga małego wyjaśnienia.

w skrócie Auth :: guard ('admin') pozwoli ci korzystać z metod uwierzytelniania (takich jak logowanie, wylogowanie, rejestracja itp.) ze swoim adminowym strażnikiem.

Na przykład

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

przeszuka $ user w tabeli adminów i zaloguje się z użytkownikiem podczas gdy

Auth::login($user)

będzie działać normalnie z tabelą użytkowników. Domyślna ochrona jest określona w config / auth.php z tablicą defaults . W świeżym laravelu jest to „sieć”.

W kontrolerze musisz zaimplementować metody z AuthenticatesUsers, aby wyświetlić niestandardowe ścieżki widoku. I potrzebujesz implementować inne funkcje, takie jak strażnik, aby korzystać z nowych funkcji użytkownika.

W tym przykładzie mój login administratora to admin / login.blade

Zaimplementowanie funkcji guard () w celu zwrócenia Auth :: guard ('admin') powoduje, że wszystkie metody cechy AuthenticatesUsers współpracują ze strażą "admin".

We wcześniejszych wersjach laravel niewiele różni się od 5.3

w 5.2 funkcja getGuard zwraca zmienną $ guard z klasy, a funkcja główna (login) używa jej

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

w 5.3 funkcja wartownika zwraca cały Auth :: guard (), a funkcja główna używa jej jak

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow