Я использовал этот API в качестве начального пакета:
https://github.com/akuzemchak/laracon-todo-api
Фильтр для базовой аутентификации выглядел так:
Route::filter('api.auth', function()
{
if (!Request::getUser())
{
App::abort(401, 'A valid API key is required');
}
$user = User::where('api_key', '=', Request::getUser())->first();
if (!$user)
{
App::abort(401);
}
Auth::login($user);
});
Который аутентифицирует пользователя как: curl -u «youruserapikeygoeshere: что угодно» http://localapidomain.dev/v1/lists
Но не будет ли медленно проверять ключ api на поле varchar в БД?
Я изменил свой фильтр так, чтобы отправлять идентификатор пользователя в качестве имени пользователя, а пароль в качестве ключа API.
Затем мой запрос выберет пользователя из первичного ключа, а затем проверит соответствие ключа API.
Потому что, если я правильно понимаю, будет быстрее сделать запрос поиска по первичному ключу вместо «WHERE api_key = key»
Route::filter('api.auth', function()
{
if (!Request::getUser())
{
App::abort(401, 'A valid user ID and API key is required');
}
$user = User::where('user_id', '=', Request::getUser())->first(['api_key']);
if (!$user)
{
App::abort(401);
}
if ($user->api_key == Request::getPassword())
{
Auth::login($user);
}
else
{
App::abort(401);
}
});
Так мой второй фильтр лучше / быстрее?
Задача ещё не решена.
Других решений пока нет …