Handler.php第133行中的HttpException:此操作未经授权

Kvn*_*amo 10 php laravel laravel-5.3

我已经使用laravel 5.3创建了一个应用程序,它在localhost上工作正常,但在我将所有代码上传到服务器上后,我遇到了这个错误:

Symfony\Component\HttpKernel\Exception\HttpException in /home/project/vendor/laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php line 133: This action is unauthorized.
Run Code Online (Sandbox Code Playgroud)

当我尝试使用post调用控制器中的函数时,就会发生这种情况.

这是一个例子:

路线

Route::group(['middleware' => 'auth'], function () {
    Route::group(['middleware' => 'admin'], function () {
         Route::post('admin/store/', 'Admin\AnnouncementController@store');
    });
});
Run Code Online (Sandbox Code Playgroud)

调节器

protected function store(AnnouncementRequest $request) {
    return Auth::user()->id;
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?为什么我的localhost没有发生这种情况?

提前致谢.

小智 46

检查您的AnnouncementRequest文件是否设置为从授权功能返回true.默认为返回false.

  • 请把这个作为答案。 (2认同)

Kvn*_*amo 1

嗯,就我所见,这种情况可能有很多情况。就我而言,我使用的是名为AnnouncementRequest的自定义 FormRequest 。在该类中,我正在检查 auth 用户的角色属性。

// before
public function authorize() {
    if(Auth::user()->role_id === 1) {
        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

我的错误是使用 === 而不是 == 进行验证。因此,修复后一切正常。

// after
public function authorize() {
    if(Auth::user()->role_id == 1) {
        return true;
    }

    return false;
}
Run Code Online (Sandbox Code Playgroud)

无论如何,为什么它在本地主机上工作但在服务器上不起作用对我来说仍然是个谜......

  • 对于您的友善信息,您应该告诉@peaceman 将他的评论作为答案而不是您自己的......! (2认同)