#laravel #authentication #middleware #laravel-middleware #laravel-8
#laravel #аутентификация #промежуточное программное обеспечение #laravel-промежуточное программное обеспечение #laravel-8
Вопрос:
Поэтому я изменил config/auth.php чтобы изменить таблицу авторизации по умолчанию с пользователя на учетные записи, подобные этой :
'defaults' => [
'guard' => 'web',
'passwords' => 'accounts',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'accounts',
],
'api' => [
'driver' => 'token',
'provider' => 'accounts',
'hash' => false,
],
],
'providers' => [
'accounts' => [
'driver' => 'eloquent',
'model' => AppAkun::class,
],
],
я изменил конфигурацию модели App Akun так же, как и модель App User :
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateFoundationAuthUser as Authenticatable;
use IlluminateNotificationsNotifiable;
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');
Ответ №1:
Вы можете просто добавить новую защиту, которая будет для вашей таблицы учетных записей, и назвать ее «учетные записи», а затем в ваших маршрутах, т.Е. Вы можете обеспечить группировку маршрутов по охране, т.е.
Route::middleware('auth:accounts')->group(function () { ...other protected routes... });
Комментарии:
1. я добавил ` ‘accounts’ => [ ‘driver’ => ‘session’, ‘provider’ => ‘accounts’, ],` и
Route::middleware('auth:accounts')->group(function () { Route::get('/login/successlogin',[LoginController::class, 'successlogin']); });
, но он все равно возвращается на страницу входа.
Ответ №2:
Я решил эту проблему, мой способ изменить таблицу аутентификации по умолчанию правильный. Но я забыл добавить туда столбец id. просто добавьте этот код в новую миграцию таблицы аутентификации по умолчанию
$table->id();