Лучший способ хранить токены API laravel? - PullRequest
0 голосов
/ 30 мая 2019

Я сейчас настраиваю новый проект в Laravel.

После входа в систему я хочу сохранить авторизованный токен пользователя. поэтому я могу сделать другой запрос API в других контроллерах, используя этот формат,

Код:

$response = $client->request('POST', '/api/user', [
'headers' => [
    'Authorization' => 'Bearer '.$token,
    'Accept' => 'application/json',
],]);

Я не совсем уверен, как я буду хранить токен $, чтобы он был доступен на всех контроллерах.

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Обычно API, использующие аутентификацию на основе токена, требуют, чтобы токен отправлялся с каждым запросом, так как, надеюсь, API не сохраняют состояние. Это означает, что независимо от того, обрабатывает ли ваш контроллер пользовательский запрос, он также будет иметь токен для выполнения других запросов в фоновом режиме. В вашем контроллере вы сможете получить токен следующим образом:

class MyController
{
    public function index(Request $request)
    {
        $authorization = $request->header('Authorization');
        $token = null;
        if (substr($authorization, 0, 7) === "Bearer ") {
            $token = substr($authorization, 7);
        }

        // in theory, this is obsolete as your controller should only
        // be called if there is a valid token present on the request
        if ($token === null) {
            abort(403); // or whatever
        }

        $client = ...; // initialize the client
        $response = $client->request('POST', '/api/user', [
            'headers' => [
                'Authorization' => 'Bearer '.$token,
                'Accept' => 'application/json',
            ],
        ]);

        // return some response to the user
    }
}

Очевидно, что имеет смысл извлечь разбор токена в его собственную функцию, которая находится в базовом контроллере, от которого наследуются все остальные контроллеры. В вашем конкретном примере вы также можете просто использовать ['headers' => ['Authorization' => $request->header('Authorization')]], поскольку вы хотите только переслать заголовок.


Старый ответ, который не имеет никакого смысла:

Сохранить токен в данных сеанса пользователя:

session(['token' => $token]);

Массив указывает, что вы устанавливаете данные в сеансе. Извлечь токен еще проще:

$token = session('token');
0 голосов
/ 30 мая 2019

Если я правильно понял, вы должны использовать паспорт для генерации токенов аутентификации, которые хранятся в вашей базе данных, и использовать промежуточное ПО для защиты ваших маршрутов, при этом каждый запрос должен быть вих заголовки - токен в параметре "bearer".

Ниже приведен пример реализации Middleware в файле api, который защищает доступ ваших контроллеров:

Route::group(['middleware' => 'auth:api'], function(){
    //define your routes here 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...