在 Symfony 2 应用程序中优雅地处理中止的 HTTP 身份验证浏览器登录尝试
Gracefully handle an aborted HTTP authentication browser login attempt in Symfony 2 application
我想在我的 SF2 应用程序中优雅地处理中止的 HTTP 登录尝试。
目前,当我单击以下锚点时,会弹出标准浏览器 HTTP 身份验证。但是,如果我单击 'cancel',我会进入空白 /secret/landing
。
如何修改我的 security/firewall 配置以简单地关闭模式并保持在同一页面上?
<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 }
您可以在.htaccess
级别处理:
RewriteEngine On
RewriteBase /
#if authorization header is empty (non-authenticated client)
RewriteCond %{HTTP:Authorization} !=""
RewriteRule ^$ /your/landing-page [L]
您需要启用 mod_rewrite
。
但我强烈建议将您的身份验证系统更改为简单的登录表单 - 它会给您更多的控制权。
我发现可以通过将 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
希望这对某人有所帮助。
我想在我的 SF2 应用程序中优雅地处理中止的 HTTP 登录尝试。
目前,当我单击以下锚点时,会弹出标准浏览器 HTTP 身份验证。但是,如果我单击 'cancel',我会进入空白 /secret/landing
。
如何修改我的 security/firewall 配置以简单地关闭模式并保持在同一页面上?
<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 }
您可以在.htaccess
级别处理:
RewriteEngine On
RewriteBase /
#if authorization header is empty (non-authenticated client)
RewriteCond %{HTTP:Authorization} !=""
RewriteRule ^$ /your/landing-page [L]
您需要启用 mod_rewrite
。
但我强烈建议将您的身份验证系统更改为简单的登录表单 - 它会给您更多的控制权。
我发现可以通过将 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
希望这对某人有所帮助。