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

时间:2018-10-15 11:14:49

标签: laravel laravel-5.4 middleware

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

  

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

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

  

App \ Exceptions \ Handler。

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

3 个答案:

答案 0 :(得分:0)

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

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

有关更多信息,请参见docs

答案 1 :(得分:0)

在您的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代码中的其他内容。

希望以上功能对您有所帮助。

答案 2 :(得分:0)

发生这种情况是因为错误处理程序中缺少未经身份验证的功能。

转到 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;