У меня возникли некоторые проблемы с реализацией мульти-аутентификации в Laravel 5.7.
Я создал новую таблицу для бэкэнд-входа: «AdminUsers».
Итак, я изменил auth.phpfile:
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => Ecommerce\User::class,
],
'admins' => [
'driver' => 'eloquent',
'table' => Ecommerce\AdminUser::class,
],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
],
],
];
Затем я создаю класс AdminLoginController:
<?php
namespace Ecommerce\Http\Controllers\Admin\Auth;
use Illuminate\Http\Request;
use Ecommerce\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
class AdminLoginController extends Controller
{
use AuthenticatesUsers;
protected $redirectTo = '/index';
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function showLoginForm()
{
return view('admin.auth.login');
}
protected function attemptLogin(Request $request)
{
return $this->guard('admin')->attempt(
$this->credentials($request), $request->filled('remember')
);
}
protected function authenticated(Request $request, $user)
{
dd('authenticated!');
}
public function username()
{
return 'username';
}
}
Я установил следующие маршруты в файле маршрутов:
Route::get ('/login', ['uses'=>'Auth\AdminLoginController@showLoginForm'])->name('login_page');
Route::post('/login', ['uses'=>'Auth\AdminLoginController@login' ])->name('do_login' );
Проблема в том, чтокогда я вхожу в систему, Laravel пытается использовать защиту «пользователей» вместо определенной защиты «администратора».Таким образом, выдается ошибка SQL (поскольку я не создал таблицу «Users» в БД).
Даже если я выполняю var_dump($this->guard('admin'))
внутри AdminLoginController::attemptLogin
метода, ответ дает мне объект SessionGuard с "Ecommerce\User
"вместо" Ecommerce\AdminUser
", который определен как" admin "в массиве защиты auth.php.
Кто-нибудь знает, где еще я могу найти решение этой проблемы?
Спасибо!