我正在构建一个名为under-construction
的包。在配置中激活此程序包时
文件网站将是underconstruction只有具有正确代码的人才能访问
应用。
https://github.com/larsjanssen6/underconstruction
我现在遇到的问题:
当输入代码时,我进行了一个ajax调用,该调用命中了这个控制器方法(称为检查):
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
总是不见了!怎么可能?
感谢您的时间。
答案 0 :(得分:2)
您未加载会话中间件,因此未启动会话且不会保留任何值。
正如评论中所提到的,即使您的受保护路由(/
)位于Web中间件(读取会话)中,您的服务提供商的路由(/under/construction
,{{1不是(没有写会话)。
简单的解决方法是添加会话,甚至更好的整个Web中间件。
/under/check
但是,如果用户将中间件添加到其Web中间件组,您可能会很快遇到无限重定向循环的问题。因此,我会添加一些检查,以确保您不会使用其中一条$routeConfig = [
'namespace' => 'LarsJanssen\UnderConstruction\Controllers',
'prefix' => 'under',
'middleware' => [
'web', // add this
// DebugbarEnabled::class, // leaving this dead code behind despite vcs
],
];
路线。
underconstruction
最终从这个项目的背景中猜测,我希望大多数人都希望在全球中间件中坚持这一点。但是,您将遇到同样的会话 - 尚未启动的问题,因为它不会在全局中间件中运行。所以还有更多可以咀嚼的东西。快乐的编码!