如何添加“记得我”登录功能

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 2.8,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

remember_me防火墙选项:

  • YAML
  • XML
  • PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15
# app / config / security.yml安全:#……防火墙:主要:#……remember_me:秘密:“% %的秘密”生命周期:604800# 1秒内的一周路径:/#默认情况下,该特性是通过检查#复选框(见下文),取消注释#下面的行始终启用它。# always_remember_me:真

remember_meFirewall定义了以下配置选项:

秘密要求

2.8

秘密选项在Symfony 2.8中引入。欧宝娱乐app下载地址在2.8之前,它被命名为关键

用于加密cookie内容的值。常用的是秘密中定义的值应用程序/配置/ parameters.yml文件。

的名字(默认值:REMEMBERME
用于保持用户登录的cookie的名称。如果您启用remember_me在同一应用程序的多个防火墙中,请确保为每个防火墙选择不同的cookie名称。否则,您将面临许多与安全相关的问题。
一生(默认值:31536000
用户保持登录状态的秒数。缺省情况下,用户登录时间为一年。
路径(默认值:/
使用与此特性关联的cookie的路径。默认情况下,cookie将应用于整个网站,但您可以限制到特定的部分(例如。/论坛/管理).
(默认值:
使用与此特性关联的cookie的域。默认情况下,cookie使用从$ _SERVER
安全(默认值:
如果真正的,与此功能相关的cookie将通过HTTPS安全连接发送给用户。
httponly(默认值:真正的
如果真正的,与此特性关联的cookie只能通过HTTP协议访问。这意味着脚本语言(如JavaScript)无法访问cookie。
remember_me_parameter(默认值:_remember_me
检查表单字段的名称,以决定是否应该启用“Remember Me”功能。请继续阅读本文,了解如何有条件地启用此功能。
always_remember_me(默认值:
如果真正的的值remember_me_parameter被忽略,“记住我”功能总是启用,而不管最终用户的愿望如何。
token_provider(默认值:
定义要使用的令牌提供程序的服务id。默认情况下,令牌存储在cookie中。例如,您可能希望将令牌存储在数据库中,以便在cookie中没有密码的(散列)版本。DoctrineBridge带有一个欧宝娱乐app下载地址\桥\学说\安全\ RememberMe\ DoctrineTokenProvider你可以用。

IS_AUTHENTICATED_ANONYMOUSLY
自动分配给站点中受防火墙保护的部分但尚未实际登录的用户。这只有在允许匿名访问的情况下才有可能。
IS_AUTHENTICATED_REMEMBERED
自动分配给通过“记住我”cookie认证的用户。
IS_AUTHENTICATED_FULLY
自动分配给在当前会话期间提供了登录详细信息的用户。

您可以使用它们来控制显式分配的角色之外的访问。

请注意

如果你有IS_AUTHENTICATED_REMEMBERED角色,那么你也有了IS_AUTHENTICATED_ANONYMOUSLY的角色。如果你有IS_AUTHENTICATED_FULLY角色,然后还有另外两个角色。换句话说,这些角色代表了认证“强度”的三个级别。

您可以使用这些附加角色对站点的部分访问进行更细粒度的控制。例如,您可能希望您的用户能够在/账户当通过cookie进行身份验证时,必须提供自己的登录详细信息才能编辑帐户详细信息。您可以通过使用这些角色保护特定的控制器操作来实现这一点。可以使用服务上下文保护控制器中的编辑操作。

在下面的示例中,仅当用户拥有IS_AUTHENTICATED_FULLY角色:

1 2 3 4 5 6 7 8 9 10
/ /……使用欧宝娱乐app下载地址组件安全核心异常AccessDeniedException/ /……公共函数editAction()->denyAccessUnlessGranted (“IS_AUTHENTICATED_FULLY”);/ /……

如果你的应用程序是基于Symfony标准版的,你也可以使用注释来保护你的欧宝娱乐app下载地址控制器:

1 2 3 4 5 6 7 8 9
使用Sensio赞助FrameworkExtraBundle配置安全/ * * *@Security(“is_granted (IS_AUTHENTICATED_FULLY)”)* /公共函数editAction的名字/ /……

提示

如果您在安全配置中也有访问控制,要求用户拥有ROLE_USER角色来访问任何帐户区域,那么你会有以下情况:

  • 如果未经身份验证(或匿名身份验证的用户)尝试访问帐户区域,将要求该用户进行身份验证。
  • 一旦用户输入了他们的用户名和密码,假设用户收到ROLE_USER角色,用户将拥有IS_AUTHENTICATED_FULLY角色,并能够访问帐户部分中的任何页面,包括editAction ()控制器。
  • 如果用户的会话结束,当用户返回站点时,他们将能够访问每个帐户页面(除了编辑页面),而无需强制重新验证。然而,当他们试图访问editAction ()控制器时,它们将被迫重新验证,因为它们还没有完全验证。

有关以这种方式保护服务或方法的详细信息,请参见如何保护应用程序中的任何服务或方法

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。