Lumen 授权 - 调用数组的成员函数 parameter()
Lumen Authorization - Call to a member function parameter() on array
尝试授权用户更新 post 如果用户 ID 和 post user_id 匹配。我在 AuthServiceProvider
中有一个自定义的授权回调,它检查 'Authorization'
header,这是 boot()
函数中的 API 键。
$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
header,这是一个api键,然后returns一个User
object.
我定义了一个门 update-post
,它检查从回调返回的用户和从控制器调用门 update-post
时传递的 post。
Gate::define('update-post', function($user, $post){
Log::info($user);
return $user->id == $post->user_id;
});
我在 PostController
中调用 Gate 的方式如下
...
$user = $this->getUserFromRequest($request);
if(Gate::denies('update-post', $post)) {
return response("Unauthorized.", 401);
}
...
我在我的 Gate 中记录了 - using Log:: info()
- $user
和 $post
变量,我可以成功地看到正确的用户和 post objects正在通过,但我收到错误 Call to a member function parameter() on array
并且我不明白为什么我会得到它。
如果你得到这样的数组,你可能需要在比较之前转换成集合
$post = collect($post);
$user = collect($user);
Gate::define('update-post', function($user, $post){
Log::info($user);
return $user->id == $post->user_id;
});
Doc参考
尝试授权用户更新 post 如果用户 ID 和 post user_id 匹配。我在 AuthServiceProvider
中有一个自定义的授权回调,它检查 'Authorization'
header,这是 boot()
函数中的 API 键。
$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
header,这是一个api键,然后returns一个User
object.
我定义了一个门 update-post
,它检查从回调返回的用户和从控制器调用门 update-post
时传递的 post。
Gate::define('update-post', function($user, $post){
Log::info($user);
return $user->id == $post->user_id;
});
我在 PostController
中调用 Gate 的方式如下
...
$user = $this->getUserFromRequest($request);
if(Gate::denies('update-post', $post)) {
return response("Unauthorized.", 401);
}
...
我在我的 Gate 中记录了 - using Log:: info()
- $user
和 $post
变量,我可以成功地看到正确的用户和 post objects正在通过,但我收到错误 Call to a member function parameter() on array
并且我不明白为什么我会得到它。
如果你得到这样的数组,你可能需要在比较之前转换成集合
$post = collect($post);
$user = collect($user);
Gate::define('update-post', function($user, $post){
Log::info($user);
return $user->id == $post->user_id;
});
Doc参考