【问题标题】:Laravel 5.3 unauthorized() AuthenticationException fatal errorLaravel 5.3未授权()AuthenticationException致命错误
【发布时间】:2017-04-25 22:53:25
【问题描述】:

我关注了Laravel 5.3 upgrade guide,它说要在App\Exceptions\Handler 中添加一个unauthenticated 方法。

但是,当它被 Auth 系统调用时,我收到以下错误:

Handler.php 第 59 行中的 FatalThrowableError: 类型错误:传递给 App\Exceptions\Handler::unauthenticated() 的参数 2 必须是 App\Exceptions\AuthenticationException 的实例,给出 Illuminate\Auth\AuthenticationException 的实例,在 /Users/Username/Development/ProjectName/vendor/ 中调用laravel/framework/src/Illuminate/Foundation/Exceptions/Handler.php 在第 135 行

我一直在寻找最后半小时,但找不到解决方案。

有什么帮助吗?

【问题讨论】:

  • 要么在使用 AuthenticationException 的文件的开头添加 use App\Exceptions\AuthenticationException;,要么将 AuthenticationException 更改为 \App\Exceptions\AuthenticationException,以便在代码中使用它。
  • 我没有创建AuthenticationException类(我不需要,Laravel升级指南也没有提到),应该是Laravel自己提供的。
  • 如果can中间件指向\Illuminate\Auth\Middleware\Authorize::classprotected $routeMiddleware数组中定义的'can' => \Illuminate\Auth\Middleware\Authorize::class这样'can' => \Illuminate\Auth\Middleware\Authorize::class,你能检查app/Http/Kernel.php吗?
  • 抱歉耽搁了,我不得不把这个项目搁置一段时间。是的,不过,它确实指向那个类:'can' => \Illuminate\Auth\Middleware\Authorize::class,

标签: php laravel authentication exception upgrade


【解决方案1】:

在此处检查您的 Handler.php 文件与 5.3 分支版本的比较:https://github.com/laravel/laravel/blob/5.3/app/Exceptions/Handler.php

注意 Handler.php 中的 unauthenticated() 方法需要一个 \Illuminate\Auth\AuthenticationException 的实例。确保 use Illuminate\Auth\AuthenticationException; 包含在文件顶部。

【讨论】:

  • 其实很不一样!我的错,我还是 Laravel 的新手。更新它解决了这个问题。谢谢乔恩!
【解决方案2】:

就我而言,我只是删除了哎呀...或恢复默认的 Handler.php

【讨论】:

    【解决方案3】:

    我在从 Laravel 5.2 升级到 5.3 时遇到了这个 Error 500 莫名其妙的问题。 storage/logs 中没有 laravel 错误日志,没有 Apache 错误日志。 .env 没有问题,调试已打开,没有损坏的 .htaccess 指令,加上 php artisan 无法运行。尝试了一切,直到我查看了 PHP 错误日志并发现:

    PHP Fatal error:  Uncaught Error: Undefined constant 'Illuminate\Auth\AuthenticationException' in C:\code\laravel-project\vendor\laravel\framework\src\Illuminate\Container\Container.php:79
    

    所以我按照@jon 的建议做了,并将我的 Handler.php 文件与新的 laravel 文件进行了比较,发现:

    在您的 App/Exceptions/Handler.php 中,确保 $dontreport 数组中的类被引用为引号中的任一字符串:

            '\Illuminate\Auth\AuthenticationException',
            '\Illuminate\Auth\Access\AuthorizationException',
            '\Symfony\Component\HttpKernel\Exception\HttpException',
            '\Illuminate\Database\Eloquent\ModelNotFoundException',
            '\Illuminate\Session\TokenMismatchException',
            '\Illuminate\Validation\ValidationException',
    

    或者这样:

            \Illuminate\Auth\AuthenticationException::class,
            \Illuminate\Auth\Access\AuthorizationException::class,
            \Symfony\Component\HttpKernel\Exception\HttpException::class,
            \Illuminate\Database\Eloquent\ModelNotFoundException::class,
            \Illuminate\Session\TokenMismatchException::class,
            \Illuminate\Validation\ValidationException::class,
    

    由于某种原因,我发现我的没有引号和修复,从而摆脱了 Error 500

    【讨论】:

      猜你喜欢
      • 2017-02-03
      • 2021-09-07
      • 1970-01-01
      • 2012-10-06
      • 1970-01-01
      • 2019-01-29
      • 2019-07-03
      • 2019-01-12
      相关资源
      最近更新 更多