【问题标题】:Better way to filter a route by query parameter?通过查询参数过滤路由的更好方法?
【发布时间】:2014-09-23 08:16:48
【问题描述】:

在 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 密钥限制我的路由组,不会导致迁移出现此问题?

【问题讨论】:

  • 您是否通过 API 推送数据来为您的数据库播种?不能直接推入数据库吗?
  • 不,直接推送到数据库做种。

标签: php laravel laravel-4 laravel-routing


【解决方案1】:

创建路由组后,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 检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2023-03-16
    • 2014-02-06
    • 2018-06-23
    相关资源
    最近更新 更多