【发布时间】: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->guard('admin')),响应也会给我一个带有“Ecommerce\User”而不是“Ecommerce\AdminUser”的 SessionGuard 对象,这是在 auth.php 保护中定义为“admin”的对象数组。
谁知道我还能在哪里解决这个问题?
谢谢!
【问题讨论】:
-
我注意到提供者部分有所不同:'table' => Ecommerce\AdminUser::class。是“表”还是“模型”?
-
您是否尝试在您的 AdminController 中添加
protected $guard = 'admin'? -
@JorgeRodríguez 那是:“table”而不是“model”。六个小时寻找和挖掘大量代码......我觉得自己像个愚蠢的新手!非常比你!
-
老实说,我没有头绪,只是看起来有点奇怪。很高兴有帮助!让我发布回复。