我使用 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
并调整user
和user-api
保护以使用users
提供程序可能更容易。