我想在我的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 }
答案 0 :(得分:0)
您可以在.htaccess
级别处理它:
RewriteEngine On
RewriteBase /
#if authorization header is empty (non-authenticated client)
RewriteCond %{HTTP:Authorization} !=""
RewriteRule ^$ /your/landing-page [L]
您需要启用mod_rewrite
。
但我强烈建议将您的身份验证系统更改为简单的登录表单 - 它将为您提供更多控制权。
答案 1 :(得分:-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
希望这有助于某人。