在symfony认证中使用form login 认证是一种常见的、灵活的方法。几乎每一个方面表单登录都可以定制。下面介绍完整的默认配置。
表单登录配置的参考
要查看完整的form login配置,请参阅SecurityBundle Configuration (“security”)。其中一些有趣的配置选项如下。
成功后的重定向
你可以选择各种各样的配置去改变登录成功后的跳转页面。默认情况下页面跳转回用户请求的页面(这个页面就是触发登录表单的页面)例如用户请求http://www.example.com/admin/post/18/edit,最终成功登录,页面还会跳转回http://www.example.com/admin/post/18/edit。这些请求的URL都存储在session中。如果没有URL出现在session中(也许是用户直接去登陆页面),然后将用户重定向到默认页面,也就是默认的首页。你可以通过多种方式完成这种行为。
如前所述,默认情况下将用户重定向到最初的页面。有时,也可能导致问题,像:如果一个后台的ajax请求“appears”是上次访问的URL,那么用户会被重定向到那里,这是不对的。有关控制信息请参阅 How to Change the default Target Path Behavior.
改变默认页面
首先,这个默认页面能够被设置(也就是说,如果没有前一个页面被存储在session里,用户会被重定向到默认页面)。要将他设置为default_security_target
路由,请看以下配置:
1 2 3 4 5 6 7 |
# app/config/security.yml security: firewalls: main: form_login: # ... default_target_path: default_security_target |
现在,当session里没有URL时,用户将被定向到default_security_target路由。
始终重定向到默认页面
你可以不管页面如何请求,都把URL定向到默认页面,你需要设置always_use_default_target_path为true即可:
1 2 3 4 5 6 7 |
# app/config/security.yml security: firewalls: main: form_login: # ... always_use_default_target_path: true |
使用Referring URL
如果以前没有URL被储存在session,你不妨尝试使用HTTP_REFERER来代替,因为这往往是相同的。你可以设置use_referer为true来实现(它默认时false):
1 2 3 4 5 6 7 |
# app/config/security.yml security: firewalls: main: form_login: # ... use_referer: true |
从表单内控制重定向的URL
你可以通过增加一个隐藏的_target_path字段来指定重定向。例如,使用以下方式,将重定向URL设置为account路由。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{# src/Acme/SecurityBundle/Resources/views/Security/login.html.twig #} {% if error %} <div>{{ error.message }}</div> {% endif %} <form action="{{ path('login_check') }}" method="post"> <label for="username">Username:</label> <input type="text" id="username" name="_username" value="{{ last_username }}" /> <label for="password">Password:</label> <input type="password" id="password" name="_password" /> <input type="hidden" name="_target_path" value="account" /> <input type="submit" name="login" /> </form> |
未完待续中。。。。。