Laravel - 无法在Exception Handler.php文件的渲染功能中访问Sessions

时间:2017-10-08 12:00:43

标签: php laravel session exception-handling

Say for 404异常处理我试图根据用户会话分别为admin和front页面显示404页面,以下是我的Handler.php文件的渲染功能

public function render($request, Exception $e)
{
    echo Session::has('user.id');
    ...
    ...
}

Session::has('user.id')总是返回null值,我无法确定用户是否实际登录。

在我的一个旧Laravel项目中,我使用了相同的逻辑并且成功运行,当前项目Laravel版本为5.2.45

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我建议使用auth() - 帮助器或Auth - Facade来检索有关当前登录用户的信息,并检查用户是否已登录。

用户ID

auth()->id();
Auth::id();

检查用户是否已登录

auth()->check();
Auth::check();

https://laravel.com/docs/5.5/authentication#retrieving-the-authenticated-user

答案 1 :(得分:0)

您将遇到的问题是StartSession中间件尚未运行的404错误,因此从技术上讲,抛出异常时用户信息尚不可用。

一种解决方案可能是专门检查端点,例如包含管理员关键字/admin/doesnotexist的内容,但它是否有限,就像您尝试/testing意图不明确一样,用户是否请求前端或后端资源?

另一种选择是:

public function render($request, Exception $exception)
{
    if ($exception instanceof NotFoundHttpException) {
        return redirect('/displaynotfound');
    }
    return parent::render($request, $exception);
}

Route::get('/displaynotfound', function() {
    // Do what you need todo, as you will have access to
    // to the user.
    dd(auth()->user());
});