在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
限制。
是否有更好的方法可以通过Laravel中的API密钥限制我的路由组,这不会导致迁移出现此问题?
答案 0 :(得分:2)
创建路由组后,即使组中没有路由被触发,也会立即运行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检查。