Php Laravel 7使用Laravel UI进行多身份验证

Php Laravel 7使用Laravel UI进行多身份验证,php,laravel,laravel-7,laravel-ui,Php,Laravel,Laravel 7,Laravel Ui,我正在为我叔叔的商店开发一个小型食品网站。Webshop可以有不同类型的用户:管理员、客户和送货员 每个用户在数据库中都有不同的表。我也相应地更新了config/auth.php,但仍然不起作用。当我尝试注册客户时,它会抛出错误: Argument 2 passed to Illuminate\Auth\SessionGuard::__construct() must implement interface Illuminate\Contracts\Auth\UserProvider, null

我正在为我叔叔的商店开发一个小型食品网站。Webshop可以有不同类型的用户:管理员、客户和送货员

每个用户在数据库中都有不同的表。我也相应地更新了config/auth.php,但仍然不起作用。当我尝试注册客户时,它会抛出错误:

Argument 2 passed to Illuminate\Auth\SessionGuard::__construct() must implement interface Illuminate\Contracts\Auth\UserProvider, null given, called in /var/www/html/pizzaShop/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php on line 125
config/auth.php

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'customers',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
        'customer' => [
            'driver' => 'session',
            'provider' => 'customers',
        ],
        'delivery_boy' => [
            'driver' => 'session',
            'provider' => 'delivery_boys',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'customers',
            'hash' => false,
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'admin' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],
        'customer' => [
            'driver' => 'eloquent',
            'model' => App\Customer::class,
        ],
        'delivery_boy' => [
            'driver' => 'eloquent',
            'model' => App\DeliveryBoy::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],


    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
            'throttle' => 60,
        ],
    ],

    'password_timeout' => 10800,

];
在controller/Auth下注册控制器

class RegisterController extends Controller
{
    
    use RegistersUsers;
    protected $redirectTo = RouteServiceProvider::HOME;
    public function __construct()
    {
        $this->middleware('guest');
        $this->middleware('guest:admin');
        $this->middleware('guest:customer');
        $this->middleware('guest:delivery_boy');
    }
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => ['required', 'string', 'max:255'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
        ]);
    }
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => Hash::make($data['password']),
        ]);
    }
    public function viewRegisterForm() {
        return View('frontend.customer.auth-view', ['authType'=>'register']);
    }
    public function registerUser(Request $request) {
        dd($request);
        return View('frontend.customer.auth-view', ['authType'=>'register']);
    }
}
我的注册表的Web路由

Route::get('/auth/', function () {
    return view('frontend.customer.auth-view');
});
Route::group(['prefix' => 'auth'], function () {
    Route::get('register/', 'Auth\RegisterController@viewRegisterForm');
    Route::post('register/', 'RegisterController@registerUser');

    Route::get('login/', 'Auth\LoginController@viewLoginForm');
    Route::post('login/', 'LoginController@loginUser');

});
Auth::routes();
我使用的是我自己的视图,而不是由Laravel UI创建的,但是我视图的表单路由是
action=“{{route('login')}}”
action=“{route('register')}”
。我希望这不会是个问题

通过浏览器导航以注册的Url:

http://localhost:8000/auth/register
错误呢


我将laravel 7与php7.4一起使用。

您没有名为
管理员
客户
送货男孩
的用户提供商,因为某些警卫正在寻找
提供商
。你用单数命名他们:

'providers' => [
    'users' => [...],
    'admin' => [...],
    'customer' => [...],
    'delivery_boy' => [...],
]

谢谢你的回答,但是我怎样才能覆盖laravel UI的路由呢?目前我的注册路径是
auth/register
with post,但是如果用户在我的主机
www.example.com/register
上键入内容,laravel应用程序会将其带到
www.example.com/register
哪个路径由laravel UI创建。覆盖哪些路径?您不能调用
Auth::routes()
如何在
Auth::routes()
中修改路由?您不能修改它们,唯一可以做的是将选项传递到
Auth::routes()
以阻止它注册某些路由集。。。否则,只需自己注册所需的路由,而不调用
Auth::routes()