在Laravel 4.2项目中,我有以下路线:
Route::group(['prefix' => 'api/v' . Config::get('api.version')], function () {
if (Input::get('api_key') != Config::get('api.key')) {
App::abort(401, 'Invalid API key!');
}
// Do stuff below...
});
通过以下方式访问:
http://domain.com/api/v1/do-stuff/value1/value2?api_key=2fl2bkqg2yqlf2l872qa
这对于用户使用他们的密钥访问API非常有用。但是,当我运行php artisan migrate --seed
时,它会触发api_key
限制。
有没有更好的方法来限制我的路由组由API键在Laravel,不会导致这个问题的迁移?
创建路由组后,即使组内没有路由被触发,也会立即运行API检查。您可以将逻辑添加到离开组的过滤器中,只保留路由,以避免这种情况,并仅在路由被过滤时执行api检查。
Route::filter("api", function()
{
if (Input::get('api_key') != Config::get('api.key'))
{
return App::abort(401, 'Invalid API key!');
}
});
然后在你的路由组中删除内联代码并添加过滤器
Route::group(array('prefix' => 'api/v1', 'before' => 'api'), function()
{
// Routes here
});
因为这些是过滤器,所以它们对于单元测试是禁用的。因为过滤器只在该组中执行路由时才会运行,所以当创建路由组时,artisan命令不会触发api检查。