1

我在我的系统中使用 Symfony Security 和自定义用户提供程序。它通过网络服务为用户提供服务。
我根据本教程(http://symfony.com/doc/current/cookbook/security/custom_provider.html)配置提供程序。

这是检查用户的功能:

public function loadUserByUsername($username)
{
    $userData = webServiceCheckUser($username);
    // return an array whit user credentials
    if ($userData) {
        $password = $userData['password'];
        $salt = $userData['salt'];
        $roles = $userData['roles'];
        $user = new WebserviceUser($username, $password, $salt, $roles);
        return $user;
    }
    throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
}

这很好用,该函数webServiceCheckUser()使用用户名调用 Web 服务,然后返回一个包含用户数据的数组。但是现在我需要通过另一个需要用户的用户名加密密码来验证他的网络服务来检查用户。我有一个加密纯文本密码的功能,就像 Web 服务正在等待一样,但是我无法获取用户在自定义用户提供程序类中的表单登录中输入的密码。如果我可以得到已经加密的密码也可以。任何一个都可以解决问题。

有没有办法做到这一点?

4

1 回答 1

2

@Pazi 是正确的,因为您可以构建自己的自定义身份验证提供程序。然而,这不是一件容易的事。

另一种方法是覆盖 DaoAuthenticationProvider 并将密码传递给 loadUser 函数。

security_listeners.xml:        
    <parameter key="security.authentication.provider.dao.class">
      Symfony\Component\Security\Core\Authentication\Provider\DaoAuthenticationProvider
    </parameter>

也许有点破解,但它节省了大量的工作。

于 2013-08-12T14:16:04.280 回答