我在Laravel中创建了一个简单的无状态身份验证过滤器,以便使用我的restAPI授权用户。
它的工作原理是发送http标头(简单演示),例如:
curl -u“5454:5454_23423dsfsdfDDdsf”
第一个参数是用户ID,第二个参数是api_key。
然后,服务器按发送的id检查用户,然后检查发送的api_key是否与数据库中的on匹配。
我也可以做一个“WHERE api_key = key”但是在archer字段的mysql DB中执行where语句似乎很慢。因此,我通过ID进行查找,然后检查api密钥是否匹配。
这个过滤器好吗?
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);
}
});