我想知道是否可以在不在防火墙后面的路径中检索用户对象。
我想要实现的是在我的索引页面(不在防火墙后面)添加一个小容器,以便在用户已经登录时显示登录表单或欢迎消息。我的安全性设置为:< / 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请求调用安全路由会有效但是有更简单的方法吗?
答案 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 %}
在树枝中检查用户是否已登录