Laravel - неправильная модель защиты, когда я пытаюсь использовать мульти аутентификацию - PullRequest
0 голосов
/ 15 сентября 2018

У меня возникли некоторые проблемы с реализацией мульти-аутентификации в 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.

Кто-нибудь знает, где еще я могу найти решение этой проблемы?

Спасибо!

1 Ответ

0 голосов
/ 15 сентября 2018

Проблема заключается в вашем разделе поставщиков auth.php.

'table'  => Ecommerce\AdminUser::class

«таблица» должна быть заменена на «модель».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...