Поиск…


Многопользовательская аутентификация

Laravel позволяет использовать несколько типов аутентификации с определенными защитами.

В laravel 5.3 множественная аутентификация немного отличается от Laravel 5.2

Я объясню, как реализовать функцию мультиаутентификации в 5.3

Сначала вам понадобится две разные модели пользователей

cp App/User.php App/Admin.php

изменить имя класса на Admin и задать пространство имен, если вы используете разные модели. это должно выглядеть

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'];

}

Также вам нужно создать миграцию для администратора

php artisan make:migration create_admins_table

затем отредактируйте файл миграции с содержимым миграции пользователей по умолчанию. Похож на это

<?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');
    }
}

edit config / auth.php

'guards'    => [
        'web'   => [
            'driver'   => 'session',
            'provider' => 'users',
        ],

        'api'   => [
            'driver'   => 'token',
            'provider' => 'users',
        ],
        //Add Admin Guard
        'admin' => [
            'driver'   => 'session',
            'provider' => 'admins',
        ],
    ],

а также

'providers' => [
        'users'  => [
            'driver' => 'eloquent',
            'model'  => App\User::class,
        ],
        //Add Admins Provider
        'admins' => [
            'driver' => 'eloquent',
            'model'  => App\Admin::class,
        ],
    ],

Обратите внимание, что мы добавляем две записи. один из охранников - переменный в переменной поставщика .

И так вы используете другого охранника, затем «веб»,

Мое приложение \ 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);
    }

}

это мало объясняет.

вкратце Auth :: guard ('admin') позволит вам использовать auth-методы (такие как логин, выход из системы, регистрация и т. д.) с вашим администратором.

Например

Auth::guard('admin')->login($user)

будет искать $ user в таблице admins и логин с пользователем, пока

Auth::login($user)

будет нормально работать с таблицей пользователей. Защита по умолчанию указана в config / auth.php с массивом по умолчанию . В свежем ларавеле это «паутина».

В контроллере вы должны реализовать методы из AuthenticatesUsers, чтобы показать свои настраиваемые пути просмотра. И вам нужно реализовать другие функции, такие как защита, чтобы использовать новые защитники пользователей.

В этом примере мой логин администратора - admin / login.blade

И, реализуя функцию guard (), чтобы вернуть Auth :: guard ('admin'), все методы атрибутов AuthenticatesUsers работают с защитой «admin».

В более ранних версиях laravel это немного отличается от 5.3

в 5.2 функция getGuard возвращает переменную $ guard из класса и основной функции (логин), используя ее в

Auth::guard($guard)->attempt(...)

в 5.3 функция охраны возвращает весь Auth :: guard (), а основная функция использует его как

$this->guard()->attempt(...)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow