检查用户是否在symfony中被重定向?

时间:2013-10-20 21:00:00

标签: php symfony

我的symfony项目中有一条受限制的路由,所以如果我尝试去那里而不登录,我会被重定向到登录页面。

我想区分我何时尝试在没有登录的情况下进入禁区,以及何时直接进入登录页面。

有关如何在symfony中执行此操作的任何线索?

更新 通过区分,我的意思是通过直接转到该URL来检查用户是否登陆登录页面,或者用户是否因为试图访问受限页面而登陆登录页面的方式。

3 个答案:

答案 0 :(得分:5)

托马斯的解决方案是一个很好的解决方案。这是另一种选择。

知道这一点,并且只有在未登录的情况下才会被重定向,您可以使用其他参数重定向安全防火墙。

security.yml

...
secured_area:
            pattern:    ^/
            form_login:
                check_path: /login_check
                login_path: /login/restricted
...

的routing.yml

login:
    pattern:  /login
    defaults: { _controller: YourBundle:Default:login }

login:
    pattern:  /login/{restricted}
    defaults: { _controller: YourBundle:Default:login }

控制器

public function loginAction($restricted = null)
{
...
Do something with $restricted
...

现在,如果有人进入登录页面:

yoursite.com/login

一切都会正常,$ restricted = null所以你知道它们直接来了。

如果有人去:

yoursite.com/admin

当他们没有登录时,他们将被重定向到:

yoursite.com/login/restricted

在您的控制器中$restricted将被设置,您将知道他们试图在未经身份验证的情况下访问受限区域。

当然,您可以将restricted更改为对您有意义的内容。

答案 1 :(得分:4)

你试过$this->get('request')->headers->get('referer')吗?

get('referer')只返回内部和相对路径。如果您在test.com,并点击转到您的应用get('referer')的链接,则会返回null。因此,如果用户点击重定向,则下一个请求应具有正确的URL。

否则您可以创建custom exception listener并抓住任何AccessDeniedException。当代码捕获一个时,您可以使用FlashBag通过重定向传递值。

答案 2 :(得分:0)

除了hcoat答案,您可以在不创建新网址的情况下执行此操作。您可以使用查询参数:

 private void fetchAudioUrlFromFirebase() throws IOException {
    String mp3 = mp3url;

    mMediaplayer = new MediaPlayer();
    mMediaplayer.setDataSource(mp3);
    mMediaplayer.prepare();//prepare to play
    if (mMediaplayer.isPlaying()) {
        stopPlaying();
    } else {
        playMedia();
    }



}

private void stopPlaying() {

    if (mMediaplayer != null) {
        mMediaplayer.stop();
    }
}


private void playMedia() {

        mMediaplayer.start();
    }
}

然后在控制器的操作中检查此参数:

 try {
         fetchAudioUrlFromFirebase();
      } catch (IOException e) {
      e.printStackTrace();
      }