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

时间:2017-02-13 22:58:20

标签: 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.

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

这是一个例子:

路线

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

控制器

protected function store(AnnouncementRequest $request) {
    return Auth::user()->id;
}

我该如何解决这个问题?为什么这不会发生在我的本地主机上?

提前致谢。

6 个答案:

答案 0 :(得分:37)

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

答案 1 :(得分:1)

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

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

    return false;
}

我的错误是使用===而不是==进行验证。因此,在确定一切正常工作之后。

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

    return false;
}

无论如何为什么它在localhost上运行但是在服务器上没有对我来说仍然是一个谜......

答案 2 :(得分:1)

默认函数返回false,因此如下所示进行更改

public function authorize()
    {
        return true;
    }

或者也可以在请求中使用Auth

use Illuminate\Support\Facades\Auth;
 public function authorize()
    {
        return Auth::check();
    }

答案 3 :(得分:0)

authorize()函数默认返回false, 返回true,您的问题将得到解决

答案 4 :(得分:0)

在您的请求文件中,默认不启用授权

public function authorize()
    {
        return false;
    }

如果您在此处启用请求文件并显示该代码。

public function authorize()
    {
        return true;
    }

答案 5 :(得分:0)

  

如果您可以使用CustomRequest方法进行验证,请确保   您的authorize()返回true。如果可以设置为false,则它永远不会调用   您的函数也抛出错误   此操作未经授权

     

解决方案

class CopyRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
         return true;   //Default false .Now set return true;
    }
}