Laravel:即使提供了正确的凭据,成功登录也会重定向到登录页面,因为身份验证中间件也打开了



我正在为预先存在的具有预先设计的架构的Web应用程序创建一个应用程序。此应用程序将使用admins表对用户进行身份验证(只有管理员可以访问此应用程序)。我无法使用users表,因为它具有应用程序客户端的数据,并且不一定需要身份验证,因为该应用程序仅由管理员使用。

我已经创建了带有字段protected $table = 'admins'User模型。为了使用 Laravel 的内置身份验证库,我通过迁移身份验证的必填字段(如emailpasswordremember_token)在admin表中创建了必填列。我的User模型如下:

<?php
namespace App;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
use Notifiable, HasRoles;
protected $table = "admin";
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}

我也有一条路线如下:

Route::get('/dashboard' , 'DashboardController@index')->name('dashboard.index')->middleware('auth');

默认LoginController在用户成功通过身份验证后重定向到路由/dashboard。但是auth中间件似乎存在一些问题,它似乎无法对当前登录的用户进行身份验证以进入/dashboard

另外,我想告诉您,我没有对 guards 密钥中的config/auth文件进行任何更改,因为User模型指向具有身份验证所有必要字段的admins表,如下所示:

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
],

'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppUser::class,
],
],

现在,每次我尝试使用auth middleware访问/dashboard或任何其他路由时,应用程序都会将我发送到登录页面。由于登录页面将重定向到仪表板(具有auth middleware),因此即使我传递了正确的凭据,我也会被重定向到登录页面,即email and password.

请注意,我通过调试检查了提供的凭据的身份验证,控制器成功验证了提供的凭据。(我在authenticated()方法中检查了这一点,AuthenticatesUsersLaravelLoginController用户的特征。如果此方法不适合检查用户是否已通过身份验证,请通知我)。

auth middleware有问题还是我需要在auth config file中修改我的guards configuration

或者,我是否需要重新迁移管理表的迁移文件?

请提出最佳替代方案。谢谢。。

也许如果您将"网络"保护上的提供商更改为"管理员",因为默认值为"用户">

最新更新