检索不在防火墙后面的路由中的用户对象?

时间:2015-11-26 15:14:19

标签: symfony

我想知道是否可以在不在防火墙后面的路径中检索用户对象。

我想要实现的是在我的索引页面(不在防火墙后面)添加一个小容器,以便在用户已经登录时显示登录表单或欢迎消息。我的安全性设置为:< / p>

firewalls:
    secured_area:
        pattern:    ^/secured
        form_login:
            login_path:                     login
            check_path:                     login_check
            csrf_provider:                  security.csrf.token_manager
            default_target_path:            secured_index_page
            always_use_default_target_path: false
        logout:
            path:                           /secured/logout
            invalidate_session:             true
            target:                         /logout-success  

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/secured, roles: ROLE_LOGGED_IN }

我想用AJAX请求调用安全路由会有效但是有更简单的方法吗?

2 个答案:

答案 0 :(得分:1)

是的,绝对可能。在Symfony中,用户有一个&#34;身份验证令牌&#34;其中包含用户详细信息。默认情况下,只要用户连接到您的网站/应用程序,他就会收到AnonymousToken。当用户成功登录时,他通常会收到一个UsernamePasswordToken,其中包含他的用户实体对象(您在var parent = this.notifyIcon1.Tag as Form` 配置文件中[ProvideProperty("ParentForm", typeof(NotifyIcon))] public class ComponentExtender : System.ComponentModel.Component, System.ComponentModel.IExtenderProvider { private Hashtable components; public ComponentExtender() : base() { components = new Hashtable(); } public bool CanExtend(object extendee) { if (extendee is Component) return true; return false; } public Form GetParentForm(NotifyIcon extendee) { return components[extendee] as Form; } public void SetParentForm(NotifyIcon extendee, Form value) { if (value == null) { components.Remove(extendee); component.Tag = null; } else { components[extendee] = value; component.Tag = value; } } } 下指定的类)。然后,此令牌将在应用程序范围内使用,无论是否受到防火墙保护,您都可以在所有页面上访问它。

要检查用户是否经过身份验证,您可以使用以下代码:

security.encoders

要检查树枝模板内部:

security.yml

您可以在official documentation中阅读更多内容。

答案 1 :(得分:0)

使用

{% if app.user %}
  welcome
{% else %}
  login
{% endif %}

在树枝中检查用户是否已登录