使用Laravel 5.3我已经设置了一个使用自己的API的网络应用程序。验证由Passport成功处理。 Web应用程序在路由和模型策略中使用auth中间件进行授权。 API路由使用默认的'auth:api'令牌防护来控制访问。
我想在app / Policies中使用相同的策略进行API授权以及web身份验证,但我不明白如何。 $this->authorize('view', $model)
等通话不起作用。我想我需要以某种方式将用户从Auth::guard('api')->user()
传递给政策?
任何帮助将不胜感激!
更新:搞定了。
似乎即使对于API调用,Laravel仍然使用来自Web防护的用户来检查策略。 API调用未定义此用户。所以我需要告诉Laravel所有API调用都应该使用api guard。
Auth::shouldUse('api');
的新中间件。 Laravel现在将对所有API请求使用api guard。像$this->authorize('view', $model)
这样的调用可以在web和api中使用。
答案 0 :(得分:2)
更新:搞定了。
似乎即使对于API调用,Laravel仍然使用来自Web防护的用户来检查策略。 API调用未定义此用户。所以我需要告诉Laravel所有API调用都应该使用api guard。
在handle函数中创建一个带Auth::shouldUse('api');
的新中间件。
将中间件分配给内核中的api部分。
Laravel现在将使用api guard来处理所有API请求。像$this->authorize('view', $model)
这样的调用可以在web和api中使用。
答案 1 :(得分:0)
只需将auth:api
中间件用于包含策略的路由