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

Posted

技术标签:

【中文标题】Laravel - 无法在 Exception Handler.php 文件的渲染功能中访问会话【英文标题】:Laravel - Unable to access Sessions in render function of Exception Handler.php file 【发布时间】:2018-03-19 17:51:10 【问题描述】:

说 404 异常处理我正在尝试根据用户会话分别为管理页面和首页显示 404 页面,以下是我的 Handler.php 文件的渲染函数

public function render($request, Exception $e)

    echo Session::has('user.id');
    ...
    ...

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

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

感谢您的帮助。

【问题讨论】:

你能把传递user.id 的方法贴到会话中吗? 为什么在这种情况下使用 session 并且没有忘记导入 Session? 【参考方案1】:

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

用户 ID

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

检查用户是否登录

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

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

【讨论】:

【参考方案2】:

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

一种解决方案可能是专门检查端点,例如包含管理员关键字/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());
);

【讨论】:

以上是关于Laravel - 无法在 Exception Handler.php 文件的渲染功能中访问会话的主要内容,如果未能解决你的问题,请参考以下文章

PhpSpreadsheet \ Reader \ Exception 无法将 /root_dir/public/laravel-excel-fLRGTlw9uEE2XRz0k1fXdcg2wfs2R

Passport Laravel Exception file_put_contents(/secret-keys/oauth\oauth-public.key): 无法打开流

Laravel dont报告处理程序无法正常工作

当数据库无法访问时,laravel 重试

Laravel 5 - 带有消息“无法准备路由”的异常“LogicException”

使用 Laravel 4 的干预 \ Image \ Exception \ ImageNotWritableException