错误 Multy Auth Laravel 6,我可以登录,但我无法访问我的家



我使用 laravel 6,我进行了多次登录,我的多次登录正在运行,但是注销后,我的欢迎页面上收到这样的错误

参数 2 传递给 Illuminate\Auth\SessionGuard::__construct() 必须实现接口 Illuminate\Contracts\Auth\UserProvider,null 给定,调用 D:\xampp2\htdocs\alkit\vendor\laravel\framework\src\Illuminate\Auth\AuthManager.php 在第 125 行

身份验证.php

<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
// Guard
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admin',
],
'admin-api' => [
'driver' => 'token',
'provider' => 'admin',
],
'camp' => [
'driver' => 'session',
'provider' => 'camp',
],
'camp-api' => [
'driver' => 'token',
'provider' => 'camp',
],
'user' => [
'driver' => 'session',
'provider' => 'user',
],
'user-api' => [
'driver' => 'token',
'provider' => 'user',
],
],
//  Providers
'providers' => [
'user' => [
'driver' => 'eloquent',
'model' => AppUser::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => AppAdmin::class,
],
'camp' => [
'driver' => 'eloquent',
'model' => AppCamp::class,
],
],
// Password
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
],
];

网络.php

<?php
Route::get('/home', function () {
return view('index');
});
// hanya untuk tamu yg belum auth
Route::get('/login', 'LoginController@getLogin')->name('login')->middleware('guest');
Route::post('/login', 'LoginController@postLogin');
Route::get('/logout', 'LoginController@logout');;
Route::get('/admin', function() {
return view('admin');
})->middleware('auth:admin');
Route::get('/user', function() {
return view('user');
})->middleware('auth:user');
Route::get('/camp', function() {
return view('camp');
})->middleware('auth:camp');

登录主计长.php

<?php
namespace AppHttpControllers;
use IlluminateHttpRequest;
use AppAdmin;
use AppUser;
use AppCamp;
use Auth;
class LoginController extends Controller
{
public function getLogin()
{
return view('login');
}
public function postLogin(Request $request)
{
// Validate the form data
$this->validate($request, [
'email' => 'required|email',
'password' => 'required'
]);
// Attempt to log the user in
// Passwordnya pake bcrypt
if (Auth::guard('admin')->attempt(['email' => $request->email, 'password' => $request->password])) {
// if successful, then redirect to their intended location
return redirect()->intended('/admin');
} else if (Auth::guard('user')->attempt(['email' => $request->email, 'password' => $request->password])) {
return redirect()->intended('/user');
} else if (Auth::guard('camp')->attempt(['email' => $request->email, 'password' => $request->password])) {
return redirect()->intended('/camp');
}
return redirect()->route('login');
}
public function logout()
{
if (Auth::guard('admin')->check()) {
Auth::guard('admin')->logout();
} else if (Auth::guard('user')->check()) {
Auth::guard('user')->logout();
} else if (Auth::guard('camp')->check()) {
Auth::guard('camp')->logout();
}
return redirect('/home');
}
}

提供程序命名错误。你应该这样使用

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppUser::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => AppAdmin::class,
],
'camps' => [
'driver' => 'eloquent',
'model' => AppCamp::class,
],
],

更改web防护配置以使用调整后的user提供程序...默认情况下,它希望使用您没有的名为users的提供程序。

'web' => [
'driver' => 'session',
'provider' => 'user',
],

如果不打算使用web防护,则不应将其设置为默认值。passwords部分是一个问题,因为您在那里拥有的唯一配置设置为使用您没有的users提供程序。

同样: https://stackoverflow.com/a/58896116/2109233

也:

Route::get('/login', 'LoginController@getLogin')->name('login')->middleware('guest');

由于您尚未指定要guest的防护装置,因此它将使用默认的防护装置,即web。因此,每个未通过web卫士登录的人都可以到达此路线。


说了这么多...将user提供程序更改为命名为users并调整useruser-api保护以使用users提供程序可能更容易。

相关内容

最新更新