Laravel 5.3 Web应用程序使用Passport

时间:2017-01-23 05:49:59

标签: laravel api laravel-passport policies

使用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。

  1. 在句柄函数中创建一个Auth::shouldUse('api');的新中间件。
  2. 将中间件分配给内核中的api部分。
  3. Laravel现在将对所有API请求使用api guard。像$this->authorize('view', $model)这样的调用可以在web和api中使用。

2 个答案:

答案 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中间件用于包含策略的路由