【问题标题】:Laravel - Getting wrong guard model when I try to use multi authenticationLaravel - 当我尝试使用多重身份验证时得到错误的保护模型
【发布时间】:2019-02-19 18:29:33
【问题描述】:

我在使用 Laravel 5.7 多身份验证实现时遇到了一些问题。

我为后端登录创建了一个新表:“AdminUsers”。

所以,我修改了 auth.php 文件:

return [
    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],


    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => Ecommerce\User::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'table'  => Ecommerce\AdminUser::class,
        ],
    ],

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

然后,我创建 AdminLoginController 类:

<?php

namespace Ecommerce\Http\Controllers\Admin\Auth;

use Illuminate\Http\Request;
use Ecommerce\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;


class AdminLoginController extends Controller
{

    use AuthenticatesUsers;

    protected $redirectTo = '/index';


    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    public function showLoginForm()
    {
        return view('admin.auth.login');
    }


    protected function attemptLogin(Request $request)
    {
        return $this->guard('admin')->attempt(
            $this->credentials($request), $request->filled('remember')
        );
    }


    protected function authenticated(Request $request, $user)
    {
        dd('authenticated!');
    }


    public function username()
    {
        return 'username';
    }

}

我在路由文件中设置了这条路由:

Route::get ('/login', ['uses'=>'Auth\AdminLoginController@showLoginForm'])->name('login_page');
Route::post('/login', ['uses'=>'Auth\AdminLoginController@login'        ])->name('do_login'  );

问题是,当我登录时,Laravel 尝试使用“用户”保护而不是定义的“管理员”保护。这样会抛出一个 SQL 错误(因为我还没有在数据库中创建“用户”表)。

即使我在AdminLoginController::attemptLogin 方法中执行var_dump($this-&gt;guard('admin')),响应也会给我一个带有“Ecommerce\User”而不是“Ecommerce\AdminUser”的 SessionGuard 对象,这是在 auth.php 保护中定义为“admin”的对象数组。

谁知道我还能在哪里解决这个问题?

谢谢!

【问题讨论】:

  • 我注意到提供者部分有所不同:'table' => Ecommerce\AdminUser::class。是“表”还是“模型”?
  • 您是否尝试在您的 AdminController 中添加 protected $guard = 'admin'
  • @JorgeRodríguez 那是:“table”而不是“model”。六个小时寻找和挖掘大量代码......我觉得自己像个愚蠢的新手!非常比你!
  • 老实说,我没有头绪,只是看起来有点奇怪。很高兴有帮助!让我发布回复。

标签: php laravel


【解决方案1】:

问题出在您的 auth.php 提供程序部分。

'table'  => Ecommerce\AdminUser::class

“表”应替换为“模型”。

【讨论】:

  • 非常感谢!就是这样。我觉得自己像个新手:P。
猜你喜欢
  • 2018-01-17
  • 2020-01-07
  • 2019-10-28
  • 2018-07-05
  • 2021-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-01
相关资源
最近更新 更多