来自UserInterface类
interface UserInterface {
/**
* The equality comparison should neither be done by referential equality
* nor by comparing identities (i.e. getId() === getId()).
*
* However, you do not need to compare every attribute, but only those that
* are relevant for assessing whether re-authentication is required.
*
* @param UserInterface $user
* @return Boolean
*/
function equals(UserInterface $user);
}
我应该如何实现这一点(“那些与评估是否需要重新认证相关的”)?那么这是否意味着在Symfony 2重新认证(用户名/密码)后用户?或者是此功能用户重新进行身份验证。我可以查看id, username, password, salt
吗? Symfony不通过密码检查重新验证用户,这应该足够了吗?
答案 0 :(得分:8)
如果equals()
返回false
,则会强制用户重新进行身份验证。你究竟检查了什么取决于你,因为它因应用程序而异。通常,您需要比较影响应用安全性的用户可能发生的变化。
例如,如果您的应用使用电子邮件和密码进行身份验证,则需要对其进行比较。相反,比较名字和姓氏字段没有意义,因为它们不会影响与您的应用程序中的身份验证相关的任何内容 - 当然,除非您的应用程序身份验证以某种方式基于它们。
如果您在应用中支持不同的角色(例如,管理员和普通用户),并且您的应用提供了一种向用户分配和重新分配这些角色的方法,那么您还需要比较角色。因为如果您想要将用户从管理员降级为普通用户,您希望该更改尽快生效 - 在用户的下一个请求中 - 而无需明确要求用户注销和重新登录。如果您在这种情况下不比较角色,则用户将保持管理员状态,直到她的会话过期。
检查ID没有意义,除非您的应用提供了更改用户ID的方法,并且它们在您的应用中用于身份验证。我也不会检查盐,因为如果它改变了也意味着密码也改变了,所以单独检查密码就足够了。
答案 1 :(得分:1)
更新
现在,相同的功能已从UserInterface中删除并添加到新界面: EquatableInterface ,并且功能名称已更改为 isEqualTo 。
因此,如果您想更改强制连接用户断开连接的逻辑,您的User类需要实现 EquatableInterface 接口函数 isEqualTo 。
请注意:如果您这样做,您将失去检查修改后的密码,修改后的用户名等的标准用户检查...