Поиск…
Многопользовательская аутентификация
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(...)