我正在开发一个Slim 3应用程序,它使用Slim Flash来显示flash消息。所有正常设置的测试都能正常工作。但是,我在我的应用程序中添加了一个中间件,以便在进入或离开受保护的页面(例如登录或注册)时转换为HTTPS(并返回到HTTP)。
问题是,当我离开注册页面(HTTPS)并重定向到主页(HTTP)时,表示帐户已成功创建的Flash消息永远不会显示。我尝试禁用中间件(因此只在HTTP页面之间工作)并且它有效。
这是我在中间件中使用的代码:
if($request->getUri()->getScheme() === 'https' && !in_array($request->getUri()->getPath(), self::SSL_REQUIRED_PATHS ) ){
$response = $response->withStatus(302)->withHeader('Location', 'http://' . $request->getUri()->getHost() . $request->getUri()->getBasePath() . '/' . $request->getUri()->getPath() );
}
显然,响应状态导致闪存消息丢失。无论如何都要保存Flash消息并在从HTTPS转回HTTP后显示它?
感谢。
答案 0 :(得分:0)
您可以在中间件重定向中添加flash消息的验证,并将消息保存为下一个请求,如下所示:
if ($request->getUri()->getScheme() === 'https' &&
!in_array($request->getUri()->getPath(), self::SSL_REQUIRED_PATHS)
) {
$messagesFlash = $app->flash->getMessages();
if ($messagesFlash) {
array_map(function($k, $v) use ($app) {
$app->flash->addMessage($k, $v);
}, array_keys($messagesFlash), $messagesFlash);
}
$location = sprintf('http://%s%s/%s'
$request->getUri()->getHost(),
$request->getUri()->getBasePath(),
$request->getUri()->getPath()
);
$response = $response->withStatus(302)->withHeader('Location', $location);
}
但我建议您在整个网站中使用HTTPS