Laravel 5.3未授权()AuthenticationException致命错误

Posted

技术标签:

【中文标题】Laravel 5.3未授权()AuthenticationException致命错误【英文标题】:Laravel 5.3 unauthorized() AuthenticationException fatal error 【发布时间】: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, 【参考方案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

【讨论】:

以上是关于Laravel 5.3未授权()AuthenticationException致命错误的主要内容,如果未能解决你的问题,请参考以下文章

从 curl 使用 Auth0 调用 Laravel 5.3 API 时未经授权的用户

CSS 未加载到 Laravel 的刀片 (5.3)

Laravel 5.3 中未显示 Passport 组件

未定义变量:Laravel 5.3 中的 _ENV

Laravel 5.3 - InvalidArgumentException 视图 [索引] 未找到 [重复]

vuejs 组件未在我的 laravel 5.3 刀片页面中呈现