【问题标题】:FatalThrowableError Call to undefined method App\Exceptions\Handler::unauthenticated() laravel 5.4FatalThrowableError 调用未定义的方法 App\Exceptions\Handler::unauthenticated() laravel 5.4
【发布时间】:2018-10-15 11:14:49
【问题描述】:

我遇到的问题是,当我的用户未登录并且我转到需要对我的博客进行身份验证的路由时,它会引发异常:“

调用未定义的方法 App\Exceptions\Handler::unauthenticated()

" 虽然我在目录中没有名为unauthenticated()的方法

应用\异常\处理程序。

当我的用户点击需要身份验证的路由时,我想为他/她显示登录表单,该怎么做?

【问题讨论】:

标签: laravel laravel-5.4 middleware


【解决方案1】:

在您的 App\Exceptions\Handler 文件中,添加一个未经身份验证的函数,Laravel 会识别它并执行您在此处定义的内容。

你可以添加这个功能:

public function unauthenticated($request, AuthenticationException $exception)
    {
        return ''; // use redirect('/login') or something if you want to redirect to login.
    }

虽然如果你使用 php artisan make:auth,Laravel 会自动将未认证页面设置为登录页面。所以不知道你有没有用过这个,也许你在标准的 Laravel 代码中改了别的东西。

我希望上面的功能有所帮助。

【讨论】:

  • 这不是解决此问题的方法,请参阅 laravel.com/docs/5.7/authentication 阅读重定向未经身份验证的用户!
  • 这是解决问题的一种方法,但上面的评论可能是一个更好的解决方案,忘记了。
【解决方案2】:

框架本身抛出的未经身份验证的异常。

如果您在路由上有 auth 中间件,它应该会将您重定向到登录页面 Route::get('/test', 'TestController@show')->middleware('auth');

请参阅docs 了解更多信息。

【讨论】:

  • 我正在为 PostController 使用以下中间件:` public function __construct(){ $this->middleware('auth'); }` 我正在锁定已注销用户的帖子,但是当他们尝试点击 帖子 来编辑/删除帖子时,他们遇到了这个问题,我想向他们显示登录表单以便认证后他们可以编辑/删除帖子,如何做到这一点?
  • 仅将中间件添加到编辑/删除帖子中,这样您就可以保护它们并保留索引端点。
【解决方案3】:

发生这种情况是因为错误处理程序中以某种方式丢失了未经身份验证的函数。

转到App\Exceptions\Handler.php文件并添加以下函数。

<?php        
    protected function unauthenticated($request, AuthenticationException $exception)
    {
        if ($request->expectsJson()) {
            return response()->json(['error' => 'Unauthenticated.'], 401);
        }
        return redirect()->guest('login');
    }

guest('login') 更改为您想要的位置。

你可以像这样在课堂上使用它:

Illuminate\Auth\AuthenticationException as AuthenticationException;

【讨论】:

    猜你喜欢
    • 2018-08-24
    • 2017-11-20
    • 1970-01-01
    • 2023-02-09
    • 2017-06-10
    • 1970-01-01
    • 2020-01-18
    • 1970-01-01
    • 2017-12-12
    相关资源
    最近更新 更多