Laravel 5表单请求验证返回禁止错误

Posted

技术标签:

【中文标题】Laravel 5表单请求验证返回禁止错误【英文标题】:Laravel 5 form request validation returning forbidden error 【发布时间】:2015-09-01 21:25:43 【问题描述】:

我正在尝试使用 Laravel 5.1 的表单请求验证来授权请求​​是否来自所有者。当用户尝试通过show.blade.php 更新表clinics 的一部分时使用验证。

到目前为止我的设置:

routes.php:

Route::post('clinic/id', 
    array('as' => 'postUpdateAddress', 'uses' => 'ClinicController@postUpdateAddress'));

ClinicController.php:

public function postUpdateAddress($id, 
        \App\Http\Requests\UpdateClinicAddressFormRequest $request)
    
        $clinic             = Clinic::find($id);
        $clinic->save();

        return Redirect::route('clinic.index');
    

UpdateClinicAddressFormRequest.php:

public function authorize()

    
        $clinicId = $this->route('postUpdateAddress');

        return Clinic::where('id', $clinicId)
        ->where('user_id', Auth::id())
        ->exists();
    

Show.blade.php

!! Form::open(array('route' => array('postUpdateAddress', $clinic->id), 'role'=>'form')) !!

!! Form::close() !!

如果我在授权函数中dd($clinicId),它会返回null,所以我认为这就是问题所在!

任何帮助为什么在提交时说“禁止”将不胜感激。

【问题讨论】:

【参考方案1】:

您收到Forbidden Error,因为authorize() 表单请求方法返回false

问题是这样的:$clinicId = $this->route('postUpdateAddress');

要访问表单请求中的路由参数值,您可以这样做:

$clinicId = \Route::input('id'); //to get the value of id

所以authorize() 应该是这样的:

public function authorize()

    $clinicId = \Route::input('id'); //or $this->route('id');

    return Clinic::where('id', $clinicId)
    ->where('user_id', Auth::id())
    ->exists();

【讨论】:

非常感谢您的帮助!这么简单的事情。 欢迎。快乐编码【参考方案2】:

我将此所有者确认添加到 Request and work 中的 authorize() 方法

public function authorize()

    return \Auth::check();

【讨论】:

以上是关于Laravel 5表单请求验证返回禁止错误的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 更改表单请求失败的验证行为

laravel中使用FormRequest进行表单验证,验证异常返回JSON

Laravel-HTTP-验证

Laravel 5.2 未显示表单验证错误 [重复]

使用 axios vuejs 和 laravel 验证表单

在 Laravel 5 中使用表单请求验证时如何添加自定义验证规则