php - 错误Multiple Auth Laravel 6,我可以登录,但我无法访问我的家
问题描述
我使用 laravel 6,我进行了多次登录,我的多次登录正在运行,但是注销后,我在欢迎页面上收到这样的错误
传递给 Illuminate\Auth\SessionGuard::__construct() 的参数 2 必须实现接口 Illuminate\Contracts\Auth\UserProvider,给定 null,在 D:\xampp2\htdocs\alkit\vendor\laravel\framework\src\Illuminate\Auth 中调用\AuthManager.php 第 125 行
授权文件
<?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' => App\User::class,
],
'admin' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
],
'camp' => [
'driver' => 'eloquent',
'model' => App\Camp::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');
登录Cobtroller.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Admin;
use App\User;
use App\Camp;
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');
}
}
解决方案
更改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
提供程序可能更容易。
推荐阅读
- vue.js - v-slot 的含义:activator="{ on }"
- python - 将 Pandas 2 个数据框合并为一张图
- c# - Bot Framework 简单切换场景
- docker - 无法在 docker 容器内执行二进制文件,但可以从主机执行
- c++ - 析构函数触发断点
- html - 将标签与输入类型文本对齐
- sharepoint - 使用 JavaScript 在 SharePoint Online (2013) 中检索列表项时出错
- excel - Excel VLOOKUP 意外结果
- amazon-web-services - 通过 java sdk 将 AWS Datapipe 作业提交到非默认队列失败
- r - 使用 mapply 将多个 R ggplots ecdf par 页面保存到 pdf 文件中