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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow