【问题标题】:Check if user is redirected or not in symfony?检查用户是否在 symfony 中被重定向?
【发布时间】:2013-10-20 21:00:00
【问题描述】:

我的 symfony 项目中有一条路线受到限制,所以如果我尝试在没有登录的情况下前往那里,我将被重定向到登录页面。

我想区分我尝试去限制区域而不登录,和我直接进入登录页面。

任何关于如何在 symfony 中做到这一点的线索?

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

【问题讨论】:

  • +1 - 我也想知道
  • @Andeas - 您如何定义访问需要登录的页面?
  • @Andeas 怎么区分?
  • @imsiso: symfony.com/doc/current/book/security.html 解释了如何做到这一点。
  • @hcoat:更新了问题。我不知道如何改写它。

标签: php symfony


【解决方案1】:

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

知道这一点,只有在未登录时您才会被重定向,您只需使用附加参数即可让您的安全防火墙重定向。

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 更改为您认为有意义的内容。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • +1 看起来更专业。我的评论呢?在配置中添加一些东西来登录,例如login?1 地址,然后检查它。
    • 你绝对可以使用查询字符串来代替 flashbag
    • 无论我是直接访问登录页面还是单击受限 URL 并因此被重定向到登录页面,始终为我设置“引荐来源”
    【解决方案3】:

    除了hcoat answer之外,您还可以在不创建新URL的情况下执行此操作。您可以使用查询参数:

    secured_area:
                pattern:    ^/
                form_login:
                    check_path: /login_check
                    login_path: /login?r
    

    然后在你的控制器的动作中检查这个参数:

    public function loginAction(Request $request)
    {
        $redirected = $request->query->has('r');
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 2010-11-13
      • 1970-01-01
      • 2012-06-16
      • 2012-02-04
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多