当我更改默认身份验证 table 时,中间件 ('auth') 不起作用
middleware('auth') doesn't work when i changed default auth table
所以我更改了 config/auth.php 以将默认身份验证 table 从用户更改为这样的帐户:
'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 或密码错误,它可以 return 返回并给出错误信息。这是我的登录码:
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');
}
}
它正在工作并且 return 正确地 login/successlogin 和 运行 那里的代码。但是当我尝试将中间件('auth')添加到 login/succeslogin 的路由时,它总是 return 返回登录页面,即使我提供了正确的 nip 和密码
Route::get('/login/successlogin',[LoginController::class, 'successlogin'])->middleware('auth');
您可以只添加一个新的守卫,它将用于您的帐户 table 并将其命名为 'accounts',然后在您的路线中,即您可以按守卫提供路线分组,即
Route::middleware('auth:accounts')->group(function () { ...other protected routes... });
我已经解决了这个问题,我更改默认身份验证的方法 table 是正确的。但是我忘了在那里添加 id 列。只需将此代码添加到您的新默认身份验证 Table 迁移
$table->id();
所以我更改了 config/auth.php 以将默认身份验证 table 从用户更改为这样的帐户:
'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 或密码错误,它可以 return 返回并给出错误信息。这是我的登录码:
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');
}
}
它正在工作并且 return 正确地 login/successlogin 和 运行 那里的代码。但是当我尝试将中间件('auth')添加到 login/succeslogin 的路由时,它总是 return 返回登录页面,即使我提供了正确的 nip 和密码
Route::get('/login/successlogin',[LoginController::class, 'successlogin'])->middleware('auth');
您可以只添加一个新的守卫,它将用于您的帐户 table 并将其命名为 'accounts',然后在您的路线中,即您可以按守卫提供路线分组,即
Route::middleware('auth:accounts')->group(function () { ...other protected routes... });
我已经解决了这个问题,我更改默认身份验证的方法 table 是正确的。但是我忘了在那里添加 id 列。只需将此代码添加到您的新默认身份验证 Table 迁移
$table->id();