Ricerca…
Multi autenticazione
Laravel ti consente di utilizzare più tipi di autenticazione con guardie specifiche.
In laravel 5.3 l'autenticazione multipla è leggermente diversa da Laravel 5.2
Spiegherò come implementare la funzionalità di multiautenticazione in 5.3
Innanzitutto hai bisogno di due diversi modelli utente
cp App/User.php App/Admin.php
cambia il nome della classe in Admin e imposta lo spazio dei nomi se usi modelli diversi. dovrebbe assomigliare
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'];
}
Inoltre è necessario creare una migrazione per l'amministratore
php artisan make:migration create_admins_table
quindi modificare il file di migrazione con il contenuto della migrazione utente predefinita. Somiglia a questo
<?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');
}
}
modifica config / auth.php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
//Add Admin Guard
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
],
e
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
//Add Admins Provider
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
],
Si noti che aggiungiamo due voci. uno in guardia variabile uno nella variabile provider .
E questo è come usi l'altra guardia, quindi "web"
La mia 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);
}
}
questo ha bisogno di poche spiegazioni.
in poche parole, Auth :: guard ('admin') ti consentirà di utilizzare i metodi di autenticazione (come login, logout, registrazione, ecc.) con il tuo amministratore.
Per esempio
Auth::guard('admin')->login($user)
cercherà $ utente nella tabella amministratori e login con l'utente mentre
Auth::login($user)
funzionerà normalmente con la tabella degli utenti. La protezione predefinita è specificata in config / auth.php con l'array defaults . In laravel fresco è "web".
Nel controller devi implementare i metodi da AuthenticatesUsers per mostrare i tuoi percorsi di visualizzazione personalizzati. E hai bisogno di implementare altre funzioni come la guardia per usare le tue nuove guardie utente.
In questo esempio il mio login amministratore è admin / login.blade
E implementando la funzione guard () per restituire Auth :: guard ('admin') tutti i metodi dei metodi AuthenticatesUsers funzionano con la guardia "admin".
Nelle versioni precedenti di laravel, questo è leggermente diverso da 5.3
in 5.2 la funzione getGuard restituisce $ guardia variabile dalla classe e dalla funzione principale (login)
Auth::guard($guard)->attempt(...)
in 5.3 la funzione di guardia restituisce l'intero Auth :: guard () e la funzione principale lo usa come
$this->guard()->attempt(...)