在 Symfony2 中使用附加参数加载用户名

loadUserByUsername with additional parameters in Symfony2

我已经实现了自定义身份验证提供程序(基于 Custom Password Authenticator),问题是 loadUserByUsername (email) 方法只接受一个参数。我需要一个额外的检查这个用户是否属于公司 ID(取自 url 参数),因为客户端可以用一个电子邮件地址注册到多个公司。

我怎样才能做到这一点?

因为 loadUserByUsername 是在 UserProviderInterface 中声明的方法的实现,你不能更改参数列表,因为 php 在这种情况下会抛出错误。我看到两种可能的解决方案:

  1. (有点骇人听闻)在您的 loadUserByUsername 传递数组的实现中,您需要检查包含 usernameID 的数组。这有点老套,因为它使用了 php 不是强类型的事实,您可以将数组而不是字符串(用户名)传递给 loadUserByUsername 方法。

    public function loadUserByUsername($params)
    {
        $id = $params['id']; 
        $username = $params['username']; 
        //now do whatever you need to do with $id and $username
    }
    
  2. 编写您自己的 loadUserByParams 方法,该方法将采用数组(usernameID),第一步将检查 ID 是否为好的,如果是这样,它将调用常规的 loadUserByUsername 方法,只有 username 个参数

    public function loadUserByParams($id, $username)
    {
        //check if $id is ok;
        if ($id_is_ok) {
            return $this->loadUserByUsername($username);
        }
    }