Кэширование учетных данных пользователя API

У меня этот код работает на каждый запрос HTTP:

if ($request->header('Authorization')) {
$token = $request->header('Authorization');
$user = User::where('api_token', $token)->whereRaw("`api_token_expires` >= CURDATE()")->active()->first();
if ($user) {
$GLOBALS['user_id'] = $user->id;
$GLOBALS['is_admin'] = $user->admin;
return $next($request);
}
}

Как видите, я беру базу данных для каждого запроса, ища действительный токен API.

Что является более эффективным — но безопасным, лучшим способом — способ справиться с этим? Должен ли я смотреть на кэширование MySQL? Redis или что-то еще?

РЕДАКТИРОВАТЬ: я не использую сессий, это API без состояния.

3

Решение

Вы можете сначала сделать авторизацию api-пользователей и ответить маркером сессии.

Затем они могут использовать этот токен сеанса для каждого следующего запроса.

Вы можете сохранить эти сеансы в переменной $ _SESSION, на диске в файле или в быстрой базе данных, такой как Redis.

Чтобы сделать это безопасно, я бы автоматически удалил старые сеансы, проверил токен сеанса по его исходному IP и принудительно установил https для API.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector