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::class
在protected $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 时未经授权的用户