Laravel вход в систему с помощью пакета суши - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь установить систему аутентификации, используя пакет суши https://github.com/calebporzio/sushi, но не могу заставить его работать.

Модель суши.

class User_sushi extends Model
{
    use \Sushi\Sushi;

    protected $rows = [
        [   'id' => '1',
            'name' => 'admin',
            'password' => 'adminnetcamara',
            'role_id' => '1',
        ],
        [
            'id' => '2',
            'name' => 'operador',
            'password' => 'operador',
            'role_id' => '2',
        ],
        [
            'id' => '3',
            'name' => 'visualizador',
            'password' => 'visualizador',
            'role_id' => '2',
        ],
    ];

    public function role()
    {
        return $this->belongsTo(Role::class);
    }
}

guard

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
        'user_sushi' => [
            'driver' => 'eloquent',
            'model' => App\User_sushi::class,
        ]
    ],

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

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

        'user_sushi' => [
            'driver' => 'session',
            'provider' => 'user_sushi',
        ],
    ],

Промежуточное ПО выглядит так.

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

        return $next($request);
    }
}

И контроллер входа.

public function login(Request $request){
        $name_req = $request->name;
        $pass_req = $request->password;

        $usuarios = User_sushi::select('name')->get();
        foreach ($usuarios as $usu) {
            if($usu->name === $name_req){
                $pass = User_sushi::where('name', $usu->name)->value('password');
                if($pass === $pass_req){
                    $id = User_sushi::where('name', $usu->name)->value('id');
                    Auth::loginUsingId($id);
                    return redirect('cz');
                }
            }
        }

Проблема в том, что я не могу получить метод аутентификации для работа, и это при условии, что все, что я сделал до сих пор, в порядке. Я думаю, это потому, что моя модель суши не имеет первичного ключа (я думаю, это также сделало бы промежуточное ПО неработающим), но я могу ошибаться. Я пока абсолютно ничего не нашел. Любое понимание, независимо от того, насколько оно маленькое, будет действительно оценено.

ОБНОВЛЕНИЕ: использование защиты Auth :: guard ('user_sushi') -> loginUsingId ($ id); выбросы и исключение Вызов неопределенного метода App \ User_sushi :: getAuthIdentifierName ()

protected static function throwBadMethodCallException($method)
    {
        throw new BadMethodCallException(sprintf(
            'Call to undefined method %s::%s()', static::class, $method
        ));
    }
...