【问题标题】:Laravel 403 forbidden on custom Request validationLaravel 403 禁止自定义请求验证
【发布时间】:2019-10-07 16:17:30
【问题描述】:

我在这里关注了文档:

https://laravel.com/docs/5.8/validation#form-request-validation

我创建了一个自定义请求 StoreName

php artisan make:request StoreName

然后添加以下验证规则:

public function rules()
{
    return [
        'name' => 'required|max:255|min:4'
    ];
}

然后根据我的控制器中的文档类型提示:

public function store(StoreName $request)
{
    $validated = $request->validated();
}

但是,当我向这个端点发送一个 post 请求时,我从 Laravel 返回了一个 403。当我删除 StoreName 自定义验证并简单地输入标准 Laravel Illuminate\Http\Request 时,请求工作正常(显然删除了 valid() 方法之后)。

所以 403 来自我的自定义验证请求,我不知道为什么?我检查了 StoreName.php 文件的文件权限,它们与项目中的所有其他文件相同。

我在我的开发服务器上使用php artisan serve,所以也没有时髦的 Apache/Nginx 配置覆盖东西。应用自定义验证请求时,除此之外的所有其他端点都可以工作。

可能是什么问题?


编辑:

值得注意的是,我也没有更改 Laravel 在新的自定义请求验证中生成的默认 authorize() 方法:

public function authorize()
{
    return false;
}

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    在您的自定义请求类中,您有这样的方法:

    public function authorize()
    {
        return true; // this is false by default which means unauthorized 403
    }
    

    【讨论】:

    • 是的,做到了,将其设置为 true 对我来说似乎违反直觉。将其设置为 true 表示您正在检查用户是否被授权,而不是 false 不检查。
    • 您应该在此处使用策略,而不仅仅是 truefalse 我刚刚向您展示了 403 的来源。
    • 所以这个答案有帮助吗?
    • @Muabazalm 是的,这个答案解决了我在 10 分钟内无法接受答案的问题。如上所述,尽管检查用户是否被授权发出请求似乎违反直觉,但设置为 false 肯定意味着不检查他们是否被授权,无论如何它都是这样读取的。
    • @twigg 如果您问的问题是“我是否有权执行此请求?”,那么它在我的脑海中读起来很好。因此,如果您在此处使用策略,它将变为$this->authorize('edit', Post::class);,这意味着我是否有权对帖子进行编辑.. true 表示是继续,false 表示 403,禁止。
    【解决方案2】:
    public function authorize()
    {
        return false;
    }
    

    根据您的要求将 false 更改为 true

        public function authorize()
    {
        return true;
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-30
      • 2016-08-27
      • 1970-01-01
      • 2018-06-06
      • 2017-08-06
      • 2018-11-05
      • 2017-11-17
      • 1970-01-01
      相关资源
      最近更新 更多