来自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不通过密码检查重新认证用户吗?这应该足够了吗?
发布于 2011-12-10 12:48:55
如果equals()返回false,用户将被迫做出相应的反应。你到底要检查什么呢?因为每个应用程序都不一样。一般情况下,您需要比较所有可能影响应用程序安全性的用户的变化。
例如,如果您的应用程序中使用电子邮件和密码进行身份验证,则需要对它们进行比较。相反,比较名字和姓字段没有意义,因为它们不会影响应用程序中任何与身份验证相关的内容--当然,除非应用程序身份验证是基于它们的。
如果您支持应用程序中的不同角色--例如管理用户和普通用户--并且您的应用程序提供了一种为用户分配和重新分配这些角色的方法,那么您也需要比较角色。因为如果您想将用户从admin降为普通用户,您希望该更改尽快生效--在用户的下一个请求中--而不显式地要求用户注销和重新登录。如果您在本例中不比较角色,则用户将一直担任管理员,直到会话到期为止。
检查ID是没有意义的,除非您的应用程序提供了一种更改用户ID的方法,并且它们用于应用程序中的身份验证。我也不会检查salt,因为如果它被更改了,这也意味着密码也被更改了,所以只检查密码就足够了。
发布于 2016-11-03 21:27:25
更新:
现在,从EquatableInterface中删除了相等的函数,并将其添加到一个新接口: UserInterface,函数名改为isEqualTo。
因此,如果要更改强制连接用户断开的逻辑,则用户类需要实现EquatableInterface接口函数isEqualTo。
要小心:如果这样做,您将失去检查修改密码、修改用户名、.的标准用户检查
https://stackoverflow.com/questions/8455337
复制相似问题