如何添加“记得我”登录功能 编辑本页 警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.5,现已不再维护。 读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。 remember_me防火墙选项。防火墙需要配置一个秘密密钥,用于加密cookie的内容。它也有几个默认值的选项,如下所示: YAML XML PHP 1 2 3 4 5 6 7 8 # app / config / security.yml防火墙:主要:remember_me:关键:“% %”秘密生命周期:31536000365天以秒计路径:/域:~#默认为当前域从$_SERVER 1 2 3 4 5 6 7 8 9 10 11 <!--app/config/security.xml --><配置><防火墙><记得我关键=“% %”秘密一生=“31536000”<!--365天在秒-->Path = "/" domain = ""<!--Defaults to the current domain from $_SERVER -->/>防火墙>配置> 12 3 4 5 6 7 8 9 10 11 12 13 / / app / config / security.php$容器->loadFromExtension (“安全”,数组(“防火墙”= >数组(“主要”= >数组(“remember_me”= >数组(“关键”= >“% %的秘密”,“一生”= >31536000,// 365天“路径”= >' / ',“域”= >”,//默认为$_SERVER中的当前域),),),)); 为用户提供使用或不使用remember me功能的选项是个好主意,因为它并不总是合适的。通常的方法是在登录表单中添加一个复选框。通过给复选框命名_remember_me,当勾选复选框并用户成功登录时,cookie将自动设置。所以,你特定的登录表单最终可能是这样的: 嫩枝 PHP 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 {# src / Acme / SecurityBundle /资源/视图/安全/ login.html。树枝#}{%如果错误%}<div>{{错误。消息}}div>{%endif%}<形式行动="{{path('login_check')}}"方法=“职位”><标签为=“用户名”>用户名:标签><输入类型=“文本”id=“用户名”的名字=“_username”价值="{{last_username}}"/><标签为=“密码”>密码:标签><输入类型=“密码”id=“密码”的名字=“_password”/><输入类型=“复选框”id=“remember_me”的名字=“_remember_me”检查/><标签为=“remember_me”>让我登录标签><输入类型=“提交”的名字=“登录”/>形式> 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!--src/Acme/SecurityBundle/Resources/views/Security/login.html.php --><?php如果($错误):? ><div><?php回声$错误->getMessage ()? >div><?phpendif? ><形式行动=“< ?php回声$view['router']->generate('login_check') ?>"方法=“职位”><标签为=“用户名”>用户名:标签><输入类型=“文本”id=“用户名”的名字=“_username”价值=“< ?php回声$last_username ?>"/><标签为=“密码”>密码:标签><输入类型=“密码”id=“密码”的名字=“_password”/><输入类型=“复选框”id=“remember_me”的名字=“_remember_me”检查/><标签为=“remember_me”>让我登录标签><输入类型=“提交”的名字=“登录”/>形式> 当cookie仍然有效时,用户将在后续访问时自动登录。 IS_AUTHENTICATED_ANONYMOUSLY-自动分配给位于防火墙保护的站点部分但实际未登录的用户。这只有在允许匿名访问的情况下才有可能。 IS_AUTHENTICATED_REMEMBERED-自动分配给通过“记住我”cookie验证的用户。 IS_AUTHENTICATED_FULLY-自动分配给在当前会话期间提供了登录详细信息的用户。 您可以使用它们来控制显式分配的角色之外的访问。 请注意 如果你有IS_AUTHENTICATED_REMEMBERED角色,那么你也有了IS_AUTHENTICATED_ANONYMOUSLY的角色。如果你有IS_AUTHENTICATED_FULLY角色,然后还有另外两个角色。换句话说,这些角色代表了认证“强度”的三个级别。 您可以使用这些附加角色对站点的部分访问进行更细粒度的控制。例如,您可能希望您的用户能够在/账户当通过cookie进行身份验证时,必须提供自己的登录详细信息才能编辑帐户详细信息。您可以通过使用这些角色保护特定的控制器操作来实现这一点。可以使用服务上下文保护控制器中的编辑操作。 在下面的示例中,仅当用户拥有IS_AUTHENTICATED_FULLY的角色。 12 3 4 5 6 7 8 9 10 11 12 13 / /……使用ob娱乐下载\组件\安全\核心\异常\AccessDeniedException公共函数editAction() {如果(假= = = $这->得到('安全.上下文”)- - - >isGranted('IS_AUTHENTICATED_FULLY')) {扔新AccessDeniedException();}/ /……} 您也可以选择安装和使用可选的JMSSecurityExtraBundle,它可以使用注释保护你的控制器: 1 2 3 4 5 6 7 8 9 使用JMS\SecurityExtraBundle\注释\安全;/ * * *@ secure(角色= " IS_AUTHENTICATED_FULLY”)* /公共函数editAction($的名字){/ /……} 提示 如果您在安全配置中也有访问控制,要求用户拥有ROLE_USER角色来访问任何帐户区域,那么你会有以下情况: 如果未经身份验证(或匿名身份验证的用户)尝试访问帐户区域,将要求该用户进行身份验证。 一旦用户输入了他们的用户名和密码,假设用户收到ROLE_USER角色,用户将拥有IS_AUTHENTICATED_FULLY角色,并能够访问帐户部分中的任何页面,包括editAction控制器。 如果用户的会话结束,当用户返回站点时,他们将能够访问每个帐户页面(除了编辑页面),而无需强制重新验证。然而,当他们试图访问editAction控制器时,它们将被迫重新验证,因为它们还没有完全验证。 有关以这种方式保护服务或方法的详细信息,请参见如何保护应用程序中的任何服务或方法. 此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。