web guard разрешает вход в систему, но admin guard не разрешает вход в систему

#laravel #eloquent #controller #guard #laravel-middleware

#laravel #красноречивый #контроллер #защита #laravel-промежуточное программное обеспечение

Вопрос:

Я определяю нового охранника «Admin», чтобы в моем проекте был системный пользователь с несколькими правами доступа и администратор. web guard разрешает вход в систему.Но admin guard не разрешает вход в систему, когда я пытаюсь войти в Admin, он выдает

 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'last_sign_in_at' in 'field list' (SQL: update `admins` set `updated_at` = 2020-09-27 12:49:24, `last_sign_in_at` = 2020-09-27 12:49:24, `current_sign_in_at` = 2020-09-27 12:49:24 where `id` = 1)
  

Моя таблица пользователей

 public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('user_type');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->boolean('status')->default(0);
        $table->timestamp('last_sign_in_at')->nullable();
        $table->timestamp('current_sign_in_at')->nullable();
        $table->string('user_click');
        $table->timestamp('user_click_time')->nullable();
        $table->rememberToken();
        $table->timestamps();
    });
}
  

Моя таблица администратора

   public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('user_type');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->boolean('status');
            $table->rememberToken();
            $table->timestamps();

             });
    }
  

auth.php

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

        //admin guard
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],





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

        'admins' => [
            'driver' => 'eloquent',
            'model' => AppAdmin::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],



 'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],

        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],
  

Моя контрольная роль промежуточного программного обеспечения

   public function handle($request, Closure $next)
    {
        
        if (!Auth::guard('admin')->check()){
            return redirect('admin/login');
        }
        return $next($request);
        
    }
  

Мой Admin.php Модель

 <?php
namespace App;
use IlluminateDatabaseEloquentModel;
//guard
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
//guard End

class Admin extends Authenticatable
{

    use Notifiable;
    protected $guard ='admin';
    protected $hidden = [
        'password', 'remember_token',
    ];
    protected $guarded=[];

    protected $casts = [
        'email_verified_at' => 'datetime',
    ];


}
  

Мой AdminController

    public function adminLogin(Request $request){
        if ($request->ismethod('post')) {
            $data = $request->input();

            if ( Auth::guard('admin')->attempt(['email' => $data['email'], 'password' => $data['password'],
                'user_type'=>'admin', 'status' => '1'])){
                return view('admin.dashboard');
            }
            else {

                return back()->with('error',' Invalid UserName Or Password');
            }

        }

    }
  

Когда я попытался войти в Admin, он выдает ошибку. Любое решение ps!

Ответ №1:

Похоже, у вас есть прослушиватель событий, который прослушивает LoginEvent Auth, и он устанавливает last_sign_in_at поле в модели и сохраняет его. Поскольку вы используете разные модели для аутентификации, в конечном итоге вы попытаетесь сделать это на любой модели в этом случае; в данном случае модель администратора.

Вам нужно будет добавить это поле в вашу таблицу администратора, или вам нужно будет проверить в прослушивателе, какую модель проводит событие, и решить, следует ли обновлять это поле в зависимости от типа этой модели.

Комментарии:

1. Если я удалю слушателей, все будет в порядке?

2. итак, вы спрашиваете: «Если проблема вызвана прослушивателем, если я его удалю, это больше не вызовет проблемы, которую оно вызывает?» 🙂

3. вы даже пробовали то, что просили?