1

我想在我的 SF2 应用程序中优雅地处理中止的 HTTP 登录尝试。

目前,当我单击以下锚点时,我会弹出标准浏览器 HTTP 身份验证。但是,如果我单击“取消”,我会进入空白/secret/landing

如何修改我的安全/防火墙配置以简单地关闭模式并保持在同一页面上?

<a href="/secret/landing/">Sign In</a>

我的security.yml样子是这样的:

security:
    providers:
        in_memory:
            memory:
                users:
                    crmpiccosecret:
                        password: rfc1872
                        roles: 'ROLE_SECRET'
    firewalls:
        secret:
            pattern: ^/secret/$
            anonymous: true
        secret_secured:
            pattern: ^/secret/.*$
            http_basic: ~
            provider: in_memory
            context: secret
    access_control:
        - { path: ^/secret, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/secret/.*, roles: ROLE_SECRET }

在此处输入图像描述

4

2 回答 2

0

您可以在级别上处理它.htaccess

RewriteEngine On
RewriteBase /

#if authorization header is empty (non-authenticated client)
RewriteCond %{HTTP:Authorization} !=""
RewriteRule ^$ /your/landing-page [L]

您需要mod_rewrite启用。

但我强烈建议将您的身份验证系统更改为简单的登录表单 - 它会给您更多的控制权。

于 2016-03-09T11:47:02.623 回答
-1

我发现可以通过将 href 更改为data-href或任意值来实现所需的行为:

<a data-href="/secret/landing/" class="btn btn--primary inline--block sign-in-button no--margin-b">Sign In</a>

然后通过 AJAX 发出请求。因此,如果它中止,那么我们将停留在同一页面上,但如果它成功,那么您将通过 JavaScript 重定向被带到该页面。

这个例子是在 CoffeeScript 中,因为这是我正在使用的,但代码非常少,可以根据需要转换为 JavaScript/jQuery:

  secretSignInButtonClickHandler: (e) =>
    e.preventDefault()

    href = $(e.currentTarget).attr('data-href')

    $.ajax
      url: href
      success: (response) =>
        document.location = href

希望这可以帮助某人。

于 2016-03-11T13:58:35.467 回答