промежуточное программное обеспечение (‘auth’) не работает, когда я изменил таблицу аутентификации по умолчанию

#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();