2017-09-25 71 views
3

尝试授权用户在用户标识和帖子user_id匹配时更新帖子。我有一个AuthServiceProvider授权的自定义回调,它检查'Authorization'标题,它是boot()函数中的API密钥。Lumen授权 - 调用阵列上的成员函数参数()

$this->app['auth']->viaRequest('api', function ($request) { 
      if($request->header('Authorization')) { 
       $user = $this->getUserFromAuthorizationHeader($request); 

       if (!empty($user)) { 
        $request->request->add(['userid' => $user->id]); 
       } 

       return $user; 
      } 
     }); 

功能getUserFromAuthorizationHeader得到一个Request $request参数并且提取Authorization头,它是一个API密钥,然后返回一个User对象。

我定义了一个门update-post,用于检查从回调中返回的用户以及从控制器调用门update-post时传递的用户。

Gate::define('update-post', function($user, $post){ 
      Log::info($user); 
      return $user->id == $post->user_id; 
     }); 

我打电话我PostController门的方式是由以下

... 
$user = $this->getUserFromRequest($request); 
     if(Gate::denies('update-post', $post)) { 
      return response("Unauthorized.", 401); 
     } 
... 

我登录 - using Log:: info() - 在我门的$user$post变量,我可以成功地看到了正确的用户和后传递的对象,但我得到错误Call to a member function parameter() on array,我不明白为什么我正好得到它。

+0

哪里是'参数()'在你的问题我不能找到它 –

+0

@先生金字塔我从来没有在我的代码中的任何地方调用'parameter()'。 – qasimalbaqali

+0

看起来像'$ user','$ post'是数组类型no? –

回答

1

你可能需要转换成收藏比较之前,如果你所得到的阵列这样

$post = collect($post); 
$user = collect($user); 
Gate::define('update-post', function($user, $post){ 
      Log::info($user); 
      return $user->id == $post->user_id; 
     }); 

Doc参考