首页 > 解决方案 > 如何使用 f3 beforeroute() 检查登录用户,重定向到登录然后返回原始路由?

问题描述

我正在尝试在我的应用程序中使用无脂肪框架。如果此路径上的所有路由都需要身份验证,则 beforeroute() 似乎是检查活动会话的合乎逻辑的选择。在我劫持用户并强制他们登录之前,我很难找到用户试图去的路径。我觉得应该有一个 f3 变量,或者我可以在 beforeroute() 中调用的一些简单的东西,它会给我关于他们试图去哪里的信息,并且我应该能够使用 f3 来完成这个,而不是我在 php 应用程序中完成此操作的其他方式(会话变量,或在域中将某些内容作为参数发送等)。

我是否遗漏了一些关于 beforeroute() 的内容?它不应该用于这种情况吗?如果没有,最佳做法是什么?

我尝试在会话变量 $f3->set('SESSION.previousUrl', $f3->REALM) 中获取 url,但由于我总是将它们重定向到登录,因此结果始终是 /login。

当我在这里时,有人可以解释f3中重新路由和重定向之间的区别吗?提前致谢。

标签: phproutingfat-free-framework

解决方案


只需将原始 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

推荐阅读