php - 如何使用 f3 beforeroute() 检查登录用户,重定向到登录然后返回原始路由?
问题描述
我正在尝试在我的应用程序中使用无脂肪框架。如果此路径上的所有路由都需要身份验证,则 beforeroute() 似乎是检查活动会话的合乎逻辑的选择。在我劫持用户并强制他们登录之前,我很难找到用户试图去的路径。我觉得应该有一个 f3 变量,或者我可以在 beforeroute() 中调用的一些简单的东西,它会给我关于他们试图去哪里的信息,并且我应该能够使用 f3 来完成这个,而不是我在 php 应用程序中完成此操作的其他方式(会话变量,或在域中将某些内容作为参数发送等)。
我是否遗漏了一些关于 beforeroute() 的内容?它不应该用于这种情况吗?如果没有,最佳做法是什么?
我尝试在会话变量 $f3->set('SESSION.previousUrl', $f3->REALM) 中获取 url,但由于我总是将它们重定向到登录,因此结果始终是 /login。
当我在这里时,有人可以解释f3中重新路由和重定向之间的区别吗?提前致谢。
解决方案
只需将原始 URL 传递给登录路由。例如:
function beforeRoute($f3,$params) {
if (/*user not authenticated*/)
$f3->reroute('/login?origin='.$f3->PATH);
// or if you need to preserve query strings:
$f3->reroute('/login?origin='.urlencode($f3->PATH.($f3->QUERY?'?'.$f3->QUERY:'')));
}
现在在您的登录路由中,如果用户正确验证,请将其重新路由回原始 URL:
function post($f3,$params) {
if (/*user gets authenticated*/) {
$f3->reroute(isset($_GET['origin'])?$_GET['origin']:'/');
}
}
至于重定向方法,它是 和 之间的route
混合reroute
。
例如,$f3->redirect('GET /oldpage','/newpage',TRUE)
是以下的简写:
$f3->route('GET /oldpage',function($f3){
$f3->reroute('/newpage',TRUE);
});
在配置文件中使用最有趣,例如:
[redirects]
GET /oldpage = /newpage
推荐阅读
- reactjs - 通过多个组件向下钻取 setSate() 是 React 中的反模式吗?
- java - 我可以在休眠中增加 jdbc 批量大小以用于开发目的吗?
- javascript - 如何在 div 的内容上调用 Javascript 函数?
- python - 如何使用 buildozer 制作 android APK?
- javascript - 获取传单地图中未找到地图容器的错误
- ios - 即使它们在 Swift 中具有相同的框架,矩形和按钮也会倾斜
- java - 是否有将 Java 代码与常规文本结合的平台?
- assembly - 虚拟地址空间的较低保留部分
- node.js - 如何使用 Node JS 流式传输视频并在我的 Django 项目中使用它?
- python - 视图中无法识别 Django 日期