【问题标题】:HttpException in Handler.php line 133: This action is unauthorizedHandler.php 第 133 行中的 HttpException:此操作未经授权
【发布时间】:2017-02-13 22:58:20
【问题描述】:

我使用 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;
}

我该如何解决这个问题?为什么我的本地主机上没有发生这种情况?

提前致谢。

【问题讨论】:

  • 我不确定为什么你的控制器的函数有protected 访问修饰符。尝试将其更改为公开,看看会发生什么。对我来说,某些东西在本地工作但不能在远程主机 9/10 上工作的原因也是缓存(尝试 php artisan cache:clear local 看看它是否仍然有效)。
  • 您好,和平人,感谢您的回复,但以上都不适合我。
  • 根据我的研究,This action is unauthorized. 在您尝试访问您没有足够权限访问的资源时出现。您的自定义请求 (AnnouncementRequest) 中发生的事情是您从授权方法返回 false。
  • 我相信你也是。如您所见,我确实在标识为管理员的中间件中进行了发布操作。问题是,我试图将其公开,但仍然遇到同样的错误。

标签: php laravel laravel-5.3


【解决方案1】:

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

【讨论】:

  • 请把这个作为答案。
【解决方案2】:

如果您可以使用 CustomRequest 方法进行验证,请确保 你的授权()返回真。如果你可以设置 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;
    }
}

【讨论】:

    【解决方案3】:

    默认函数返回false,如下图修改

    public function authorize()
        {
            return true;
        }
    

    或者也可以在Request中使用Auth

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

    【讨论】:

      【解决方案4】:

      嗯,就我所见,这种情况可能有很多情况。在我的例子中,我使用了一个名为 AnnouncementRequest 的自定义 FormRequest。在该类中,我正在检查身份验证用户的角色属性。

      // 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 上有效但在服务器上无效,这对我来说仍然是个谜......

      【讨论】:

      • 为了您的好消息,您应该告诉@peaceman 发表他的评论作为答案,而不是您自己的..!
      • 你是绝对正确的,@BasheerAhmedKharoti。 Peaceman 建议纠正了我代码中的相同错误。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

        public function authorize()
            {
                return false;
            }
        

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

        public function authorize()
            {
                return true;
            }
        

        【讨论】:

          猜你喜欢
          • 2016-11-27
          • 1970-01-01
          • 1970-01-01
          • 2020-04-20
          • 2019-05-04
          • 2020-04-23
          • 1970-01-01
          • 1970-01-01
          • 2022-07-01
          相关资源
          最近更新 更多