Laravel 中间件(';auth';)不';更改默认身份验证表时无法工作
因此,我更改了config/auth.php,将默认auth表从user更改为accounts,如下所示:Laravel 中间件(';auth';)不';更改默认身份验证表时无法工作,laravel,authentication,middleware,laravel-middleware,laravel-8,Laravel,Authentication,Middleware,Laravel Middleware,Laravel 8,因此,我更改了config/auth.php,将默认auth表从user更改为accounts,如下所示: 'defaults' => [ 'guard' => 'web', 'passwords' => 'accounts', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'accounts', ],
'defaults' => [
'guard' => 'web',
'passwords' => 'accounts',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'accounts',
],
'api' => [
'driver' => 'token',
'provider' => 'accounts',
'hash' => false,
],
],
'providers' => [
'accounts' => [
'driver' => 'eloquent',
'model' => App\Akun::class,
],
],
我已将App\Akun模型配置更改为与App\User模型相同:
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
class Akun extends Authenticatable
{
use HasFactory;
protected $table = 'accounts';
protected $fillable = [
'nip',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
protected $casts = [
'email_verified_at' => 'datetime',
];
}
我的登录系统也在工作。如果NIP或密码错误,它可以返回,并给出错误消息。这里是我的登录代码:
function checklogin(Request $request){
$this->validate($request,[
'nip' => 'required',
'password' => 'required'
]);
$akun_data = array(
'nip' => $request->get('nip'),
'password' => $request->get('password')
);
if(Auth::attempt($akun_data)){
return redirect('login/successlogin');
}else{
return back()->with('pesan','NIP atau Password salah');
}
}
它工作正常,返回到login/successlogin并在其中运行代码。但当我尝试将中间件(“auth”)添加到登录/成功登录的路径时,即使我给出了正确的nip和密码,它也会返回到登录页面
Route::get('/login/successlogin',[LoginController::class, 'successlogin'])->middleware('auth');
您只需为您的accounts表添加一个新的guard,并将其称为“accounts”,然后在您的路由中,即您可以按guard提供路由分组,即
Route::middleware('auth:accounts')->group(函数(){…其他受保护的路由…});
我已经解决了这个问题,我更改默认身份验证表的方法是正确的。但我忘了在那里添加id列。只需在新的默认身份验证表迁移中添加此代码
$table->id();
我已经添加了“'accounts'=>['driver'=>'session','provider'=>'accounts',]”和
Route::middleware('auth:accounts')->group(函数(){Route::get('/login/successlogin',[LoginController::class,'successlogin']);)代码>但仍然返回到登录页面。