Установить защиту по умолчанию после регистрации / входа в систему при использовании нескольких охранников в Laravel - PullRequest
0 голосов
/ 23 апреля 2020

Я работаю над Laravel проектом API, в котором в таблице пользователей есть столбец типа со значением, равным студенту или компании.

В целях аутентификации пользователей обоих типов и ограничения доступа Для определенных маршрутов я установил два сторожа с одним и тем же драйвером (JWT) и поставщиком (Пользователи).

       'company' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],

        'student' => [
            'driver' => 'jwt',
            'provider' => 'users',
            'hash' => false,
        ],

В методе входа и регистрации моего контроллера я получаю доступ к значению типа пользователя из формы, где пользователь выбирает свою роль (студент или компания).

public function register(){

        $user= $this->create(request()->all());
        $token=auth(request('type'))->login($user);
        return $this->respondWithToken($token);


    }

Цель доступа к типу пользователя состоит в том, чтобы передать это значение методу auth (), который, в свою очередь, использует его для входа в систему пользователя через этот указанный c guard.

Проблема в том, что я должен использовать этот запрос (тип) в каждом методе контроллера везде, где необходима аутентификация, и необходимо использовать методы, связанные с auth (). например, метод jwt responsewithtoken ()

protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => auth(request('type'))->factory()->getTTL() * 60
        ]);
    }

Что я хочу: мне нужен механизм для динамической установки защиты после успешного входа в систему, и я должен иметь возможность использовать метод auth (), не пропуская никаких Аргумент к этому.

// shoulduseguarddynamically(request('type'));

PS: Пожалуйста, проверьте также, что использование охранников таким образом, когда у меня одна таблица с многопользовательскими пользователями, является правильным подходом?

1 Ответ

1 голос
/ 23 апреля 2020

Во-первых, ваш подход не совсем безопасен - просто вмешательство в 'type' предоставит вам доступ к местам, которые вам не должны go.

Вы бы лучше использовали Гейтса вместо охранников для этого Вы можете проверить их в документах здесь: https://laravel.com/docs/7.x/authorization#gates

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...