如何使用 f3 beforeroute() 检查登录用户,重定向到登录然后返回原始路由?

How to use f3 beforeroute() to check for logged in user, redirect to login and then back to original route?

我正在尝试在我的应用程序中使用 fat free 框架。 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']:'/');
  }
}

至于redirect方法,它是routereroute的混合。

例如,$f3->redirect('GET /oldpage','/newpage',TRUE) 是 shorthand 用于:

$f3->route('GET /oldpage',function($f3){
  $f3->reroute('/newpage',TRUE);
});

最有趣的是用在配置文件中,例如:

[redirects]
GET /oldpage = /newpage