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(...)