授权后未调用 Laravel 6.x 策略(无中间件)



我在Laravel 6策略方面遇到了一些问题。我一直收到 403 未经授权的请求,即使它应该是未经身份验证的请求。

文件:

接口.php

Route::prefix('v2')
->group(function () {
Route::prefix('agencies')->group(function () {
Route::post('/', 'ApiAgencyController@store');
});
}

代理控制.php

<?php
namespace AppHttpControllersApi;
use AppEntitiesAgency;
class AgencyController extends Controller {
public function store(AgencyRequest $request)
{
$this->authorize('create', Agency::class);
// Code that is never executed
}
}

代理政策.php

class AgencyPolicy
{
public function create(User $user)
{
Log::info('hello?'); // This Log is never executed
return true;
}
}

身份验证服务提供商.php

class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
AppEntitiesAgency::class => AppPoliciesAgencyPolicy::class,
// Other policies
];
public function boot()
{
$this->registerPolicies();
Gate::before(function ($user) {
if ($user->hasRole(SuperAdmin::ROLE_NAME)) {
return true;
}
});
Passport::routes(null,  ['prefix' => 'api/oauth']);
}
}

我的代码与文档相同,但尽管如此,我仍然不断获得未经授权的 403,对于我的生活,我无法理解发生了什么。所有的帮助将不胜感激。

正如lagbox谢天谢地回答的那样,答案在文档中,其中指出:

默认情况下,如果传入的 HTTP 请求不是由经过身份验证的用户发起的,则所有入口和策略都会自动返回 false。但是,您可以通过声明"可选"类型提示或为用户参数定义提供 null 默认值来允许这些授权检查传递到您的入口和策略:

因此,我的问题可以通过在AgencyPolicy中使用?User来解决.php:

class AgencyPolicy
{
public function create(?User $user)
{
return true;
}
}

这就解决了问题。

相关内容

  • 没有找到相关文章

最新更新