【问题标题】:Laravel trigger route after filter过滤后的Laravel触发路由
【发布时间】:2014-04-01 18:27:47
【问题描述】:

我构建了一个过滤器,它检查发送的一些键和 ID,然后给出通过或不通过。问题是 Laravel 中的过滤器应该返回一个字符串,而我只是想返回一个布尔值并让它触发预期的路由。

过滤器:

Route::filter('api_checkauth', function($route)
{
  //user"ok"
    $user_id = (int) $route->getParameter('user_id');

    $sig = $route->getParameter('sig');

    $user = User::find($user_id);

    if($user) {
      //user email
      $email = $user->email;
      //user api key
      $api_key = $user->api_key;
      //recreate signature

      $_sig = hash_hmac("sha256", $email . $user_id, $api_key);

      if($_sig === $sig) {
          return Response::json(array("message"=>"Request Ok"),200);
      } else {
          return Response::json(array("message"=>"Request Bad"),400);
      }
    } else {
      return Response::json(array("message"=>"Request not authorized"),401);
    }

});

路线:

// Route group for API versioning
Route::group(array('prefix' => 'api/v1', 'before' => 'api_checkauth'), function()
{

    Route::get('/pim/{user_id}/{sig}', 'MoreOrLessController@index');
});

所以问题是,我怎样才能触发我在组中定义的路线?因为现在发生的是只打印一条消息而不是应该触发的控制器方法。

谢谢

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    在 Laravel 中,如果过滤器返回响应,则该响应被视为对请求的响应,并且不会执行路由。所以,为了让路由被执行,只有在用户没有被授权的情况下才会返回响应。

    if($user) {
    
      $email = $user->email;
    
      $api_key = $user->api_key;
    
      $_sig = hash_hmac("sha256", $email . $user_id, $api_key);
    
      if($_sig !== $sig) {
    
        return Response::json(array("message"=>"Request Bad"),400);
      }
    
    } else {
    
      return Response::json(array("message"=>"Request not authorized"),401);
    }
    

    【讨论】:

    • 谢谢!你的回答有点含糊,但我理解。
    【解决方案2】:

    答案是您在错误的地方返回了 200 HTTP 响应。

    正如您所指出的,由于 if/else 语句的结构,无论发生什么情况,您总是会从过滤器中获得 JSON 字符串响应。

    不要在过滤器中返回 200 响应,而是在 MoreOrLessController@index 操作中处理它。因此,澄清一下,*当您确认 $_sig === $sig* 时,不要在过滤器中返回任何内容。

    应该这样做!

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      相关资源
      最近更新 更多