在 Symfony2 中使用附加参数加载用户名
loadUserByUsername with additional parameters in Symfony2
我已经实现了自定义身份验证提供程序(基于 Custom Password Authenticator),问题是 loadUserByUsername (email) 方法只接受一个参数。我需要一个额外的检查这个用户是否属于公司 ID(取自 url 参数),因为客户端可以用一个电子邮件地址注册到多个公司。
我怎样才能做到这一点?
因为 loadUserByUsername
是在 UserProviderInterface
中声明的方法的实现,你不能更改参数列表,因为 php 在这种情况下会抛出错误。我看到两种可能的解决方案:
(有点骇人听闻)在您的 loadUserByUsername
传递数组的实现中,您需要检查包含 username
和 ID
的数组。这有点老套,因为它使用了 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
是否为好的,如果是这样,它将调用常规的 loadUserByUsername
方法,只有 username
个参数
public function loadUserByParams($id, $username)
{
//check if $id is ok;
if ($id_is_ok) {
return $this->loadUserByUsername($username);
}
}
我已经实现了自定义身份验证提供程序(基于 Custom Password Authenticator),问题是 loadUserByUsername (email) 方法只接受一个参数。我需要一个额外的检查这个用户是否属于公司 ID(取自 url 参数),因为客户端可以用一个电子邮件地址注册到多个公司。
我怎样才能做到这一点?
因为 loadUserByUsername
是在 UserProviderInterface
中声明的方法的实现,你不能更改参数列表,因为 php 在这种情况下会抛出错误。我看到两种可能的解决方案:
(有点骇人听闻)在您的
loadUserByUsername
传递数组的实现中,您需要检查包含username
和ID
的数组。这有点老套,因为它使用了 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
是否为好的,如果是这样,它将调用常规的loadUserByUsername
方法,只有username
个参数public function loadUserByParams($id, $username) { //check if $id is ok; if ($id_is_ok) { return $this->loadUserByUsername($username); } }