我将此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:whatever”http://localapidomain.dev/v1/lists
但是,对于DB上的varchar字段检查api密钥会不会很慢?
我修改了我的过滤器,以便将用户ID作为用户名发送,然后将密码作为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);
}
});
我的第二个过滤器更好/更快吗?