Sök…
Flera autentisering
Med Laravel kan du använda flera autentiseringstyper med specifika vakter.
I laravel 5.3 skiljer sig flera autentiseringar lite från Laravel 5.2
Jag förklarar hur man implementerar multiauthentication-funktionen i 5.3
Först behöver du två olika användarmodeller
cp App/User.php App/Admin.php
ändra klassnamn till Admin och ställ in namnutrymme om du använder olika modeller. det ska se ut
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'];
}
Du måste också skapa en migrering för admin
php artisan make:migration create_admins_table
redigera sedan migreringsfilen med innehållet i standardanvändarmigreringen. Ser ut så här
<?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');
}
}
redigera config / auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
//Add Admin Guard
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
och
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
//Add Admins Provider
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
Lägg märke till att vi lägger till två poster. en i vakter variabel en i leverantörens variabel.
Och det här är hur du använder den andra skyddet sedan "webben"
Min 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);
}
}
detta behöver lite förklaring.
i ett nötskal Auth :: guard ('admin') tillåter dig att använda autorisationsmetoder (som inloggning, utloggning, register etc.) med din administratörsvakt.
Till exempel
Auth::guard('admin')->login($user)
kommer att söka $ användare i administratörstabellen och logga in med användaren medan
Auth::login($user)
fungerar normalt med användartabellen. Standardvakt anges i config / autor.php med standardinställning . I färsk larvel är det "webb".
I controller måste du implementera metoder från AutenticatesUsers för att visa dina anpassade visningsvägar. Och du behöver implementera andra funktioner som skydd för att använda dina nya användarvakter.
I det här exemplet är min admin-inloggning admin / login.blade
Och genom att implementera funktionen guard () för att returnera Auth :: guard ('admin') fungerar alla AuthenticatesUsers-dragmetoder med "admin" -vakt.
I tidigare versioner av laravel är detta lite annorlunda än 5.3
i 5.2 får getGuard-funktionen $ guard-variabel från klass och huvudfunktion (inloggning) använder den i
Auth::guard($guard)->attempt(...)
i 5.3 skyddsfunktion returnerar hela Auth :: guard () och huvudfunktionen använder den som
$this->guard()->attempt(...)