Zoeken…
Multi-authenticatie
Met Laravel kunt u meerdere verificatietypen gebruiken met specifieke bewakers.
In laravel 5.3 verschilt meervoudige authenticatie weinig van Laravel 5.2
Ik zal in 5.3 uitleggen hoe de multiauthenticatiefunctie te implementeren
Eerst heb je twee verschillende gebruikersmodellen nodig
cp App/User.php App/Admin.php
wijzig de klassennaam in Beheerder en stel de naamruimte in als u andere modellen gebruikt. het zou eruit moeten zien
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'];
}
Ook moet u een migratie voor admin maken
php artisan make:migration create_admins_table
bewerk vervolgens het migratiebestand met de inhoud van de standaard gebruikersmigratie. Het lijkt hierop
<?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');
}
}
config / auth.php bewerken
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
//Add Admin Guard
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
en
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
//Add Admins Provider
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
Merk op dat we twee ingangen toevoegen. één in bewakers variabel één in providers variabel.
En zo gebruik je de andere bewaker dan "web"
Mijn 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);
}
}
dit behoeft weinig uitleg.
in een notendop Met Auth :: guard ('admin') kunt u auth-methoden (zoals inloggen, uitloggen, registreren enz.) gebruiken met uw admin guard.
Bijvoorbeeld
Auth::guard('admin')->login($user)
zal $ user zoeken in admins-tabel en inloggen met de user while
Auth::login($user)
werkt normaal met de gebruikerstabel. Standaardbewaking is opgegeven in config / auth.php met standaardwaardenarray . In verse laravel is het "web".
In de controller moet u methoden van AuthenticatesUsers implementeren om uw aangepaste weergavepaden weer te geven. En u moet andere functies implementeren, zoals bewaken om uw nieuwe gebruikersbeschermingen te gebruiken.
In dit voorbeeld is mijn admin-login admin / login.blade
En door de functie guard () te implementeren om Auth :: guard ('admin') te retourneren, werken alle traitmethoden van AuthenticatesUsers met de "admin" guard.
In eerdere versies van larve is dit weinig anders dan 5.3
in 5.2 retourneert de getGuard-functie $ guard variabele uit klasse en hoofdfunctie (login) gebruik het in
Auth::guard($guard)->attempt(...)
in 5.3 bewakingsfunctie retourneert hele Auth :: bewaker () en hoofdfunctie gebruiken het als
$this->guard()->attempt(...)