【问题标题】:Laravel package session variable not saving with ajax callLaravel 包会话变量不使用 ajax 调用保存
【发布时间】:2018-03-07 22:09:09
【问题描述】:

我正在构建一个名为 under-construction 的包。当这个包在配置中被激活时 文件网站将被建设中只有拥有正确代码的人才能访问 应用。

https://github.com/larsjanssen6/underconstruction

我现在遇到的问题:

输入代码后,我进行了一个 ajax 调用,该调用命中了这个控制器方法(称为 check):

https://github.com/larsjanssen6/underconstruction/blob/master/src/Controllers/CodeController.php

如果代码正确,则正在设置会话变量:

session(['can_visit' => true]);

然后在我的 vue.js 代码中,我重定向到 /。它会再次袭击我的中间件。在这里,我检查是否存在名为can_visit 的会话。

return session()->has('can_visit');

https://github.com/larsjanssen6/underconstruction/blob/master/src/UnderConstruction.php

但是会话变量can_visit 总是消失了!这怎么可能?

感谢您的宝贵时间。

【问题讨论】:

  • 检查中间件“web”是否被调用。它是初始化会话的中间件
  • 是的,路由在 web.php 中,所以它们使用 web 中间件。

标签: php laravel session package


【解决方案1】:

您没有加载会话中间件,因此没有启动会话,也没有保留任何值。

正如 cmets 中提到的,即使您的受保护路由 (/) 在 Web 中间件中(读取会话),您的服务提供商的路由(/under/construction/under/check)却不在(没有写入会话) .

简单的解决方法是添加会话,甚至更好的是,添加整个 Web 中间件。

$routeConfig = [
    'namespace' => 'LarsJanssen\UnderConstruction\Controllers',
    'prefix' => 'under',
    'middleware' => [
        'web', // add this
        // DebugbarEnabled::class, // leaving this dead code behind despite vcs
    ],
];

但是,如果用户将您的中间件添加到他们的 Web 中间件组中,您可能很快就会遇到无限重定向循环的问题。因此,我会添加某种检查,以确保您不在现有的 underconstruction 路线之一上。

public function handle($request, Closure $next)
{
    // check this isn't one of our routes
    // too bad router hasn't loaded named routes at this stage in pipeline yet :(
    // let's hope it doesn't conflict with user's routes
    if ($request->is('under/*')) {
        return $next($request);
    }

    if (! $this->config['enabled']) {
        return $next($request);
    }

    if (!$this->hasAccess($request)) {
        return new RedirectResponse('/under/construction');
    }

    return $next($request);
}

最终从这个项目的上下文中猜测,我预计大多数人都希望将其粘贴在全局中间件中。但是,您将遇到相同的会话尚未开始的问题,因为它不在全局中间件中运行。所以还有更多要咀嚼的东西。编码愉快!

【讨论】:

  • 非常感谢您抽出宝贵时间。真的很感激!经过大量研究,终于有了解决方案。
猜你喜欢
  • 2015-02-14
  • 2016-02-02
  • 2017-01-02
  • 2014-07-11
  • 2012-05-17
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
相关资源
最近更新 更多