从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不会通过密码检查来重新验证用户身份,这应该足够了吗?

最佳答案

如果equals()返回false,则将强制用户重新启动。您要检查的内容完全由您决定,因为一个应用程序与另一个应用程序不同。通常,您需要比较影响用户安全的一切内容。

例如,如果在应用程序中使用电子邮件和密码进行身份验证,则需要对其进行比较。相反,比较名字和姓氏字段是没有意义的,因为它们不会影响与您的应用程序中的身份验证有关的任何内容-当然,除非您的应用程序身份验证是基于它们的。

如果您在应用程序中支持其他角色(例如,管理员和普通用户),并且您的应用程序提供了一种向用户分配和重新分配这些角色的方法,那么您也需要比较角色。因为如果要将用户从管理员降级为普通用户,则希望该更改在用户的下一个请求上尽快生效,而无需明确要求用户注销和重新登录。如果您在这种情况下不比较角色,则用户将保持管理员身份,直到 session 结束。

除非您的应用提供了一种更改用户ID的方法,并且您将其用于应用中的身份验证目的,否则检查ID毫无意义。而且我也不会检查盐,因为如果更改了盐,这也意味着密码也已更改,因此仅检查密码就足够了。

关于authentication - Symfony 2 UserInterface::equals($ user):比较以进行重新认证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8455337/

10-16 23:36