首页 > 解决方案 > 错误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');
    }
}

标签: phplaravel

解决方案


更改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提供程序可能更容易。


推荐阅读