我已经实现了自定义身份验证提供程序(基于自定义密码身份验证器),问题是loadUserByUsername (电子邮件)方法只接受一个参数。我需要额外的一个来检查此用户是否属于公司ID(取自url参数),因为可以使用一个电子邮件地址向多个公司注册客户端。
我怎样才能做到这一点?
因为loadUserByUsername
是UserProviderInterface
中声明的方法的实现,所以你不能改变参数列表,因为在这种情况下php会抛出错误。我看到两种可能的解决方案:
-
(有点黑客)在包含
username
ANDID
的loadUserByUsername
传递数组的实现中,您需要检查。这有点黑客,因为它使用了 php 不是强类型的事实,您可以将数组而不是字符串(用户名)传递给loadUserByUsername
方法。public function loadUserByUsername($params) { $id = $params['id']; $username = $params['username']; //now do whatever you need to do with $id and $username }
-
编写您自己的
loadUserByParams
方法,该方法将采用数组(username
和ID
),并在第一步中检查ID
是否正常,如果是,它将调用仅包含username
参数的常规loadUserByUsername
方法public function loadUserByParams($id, $username) { //check if $id is ok; if ($id_is_ok) { return $this->loadUserByUsername($username); } }