【问题标题】:Laravel logging users out after x number of requestsLaravel 在 x 次请求后注销用户
【发布时间】:2017-05-19 05:11:57
【问题描述】:

应用程序一直按预期运行,直到我添加了以下用于显示图像的路由:

Route::get('/images/workers/{imageName}', function($imageName){
    if(Auth::check()){

        // Intervention using GD does not have functionality for bmp images
        //return \Image::make(getenv('IMAGE_DIR') . $imageName)->response();

        $filename = getenv('IMAGE_DIR') . $imageName;
        $handle = fopen($filename, "rb");
        $contents = fread($handle, filesize($filename));
        fclose($handle);

        header("content-type: image/bmp");

        echo $contents;

    } else {
        return \Image::make(getenv('IMAGE_DIR') . 'denied.png')->response();
    }
});

在我的一个控制器中,我获取包含指向这些图像的链接的记录,并将它们显示在带有分页的表格中。我一次显示 50 条记录,使用 <img> 元素显示图像(记录的缩略图)。我通常可以按预期显示前几页,但随后我将开始显示我的denied.png 图像,一旦发生这种情况,我发现我已注销并且必须重新登录。

我阅读了Andrew's answer here 并得出结论,我发生了一种竞争情况,它以某种方式破坏了会话并导致帐户被注销。然后我在我的数据库中创建了一个sessions 表并将laravel 中的会话驱动程序更改为database,但是它看起来不像是使用会话驱动程序进行身份验证?那是对的吗?如果是这样并且这是一种竞争条件,我该如何规避它?

使用 laravel 5.2.45

编辑

还有一点值得注意,就是这个环境使用的是 nginx/phpfpm。是不是我的大部分请求都由一个工作线程处理,但偶尔它们正在由另一个处理,而这个线程不知道现有的身份验证会话?或者哪个工作线程通过 fpm 处理请求并且身份验证会话在它们之间持续存在并不重要?

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    似乎用网络中间件包装这个特定的路由解决了这个问题:

    Route::group(['middleware' => ['web']], function () {
    
        Route::get('/images/workers/{imageName}', function($imageName){
            if(Auth::check()){
    
                // Intervention using GD does not have functionality for bmp images
                //return \Image::make(getenv('IMAGE_DIR') . $imageName)->response();
    
                $filename = getenv('IMAGE_DIR') . $imageName;
                $handle = fopen($filename, "rb");
                $contents = fread($handle, filesize($filename));
                fclose($handle);
    
                header("content-type: image/bmp");
    
                echo $contents;
    
            } else {
                return \Image::make(getenv('IMAGE_DIR') . 'denied.png')->response();
            }
        });
    
    });
    

    【讨论】:

      猜你喜欢
      • 2014-11-29
      • 2015-12-28
      • 2017-07-06
      • 2018-02-13
      • 1970-01-01
      • 2020-02-07
      • 2018-08-01
      • 1970-01-01
      • 2016-02-13
      相关资源
      最近更新 更多