目前正在寻找其他人在需要使用userprincipalname
而不是使用samaccountname
的Edvlerblog \ Adldap2 validatePassword函数进行身份验证时如何处理验证密码功能。
如果您正在努力,请在评论中提供反馈 我们可以更新文档。
app/common/model/LoginForm
的getUser
Edvlerblog \ Adldap2 getUser()函数可以工作,甚至可以缓存queryLdapUserObject,允许您获取任何AD属性。
protected function getUser()
{
if ($this->_user === null) {
$this->_user = \Edvlerblog\Adldap2\model\UserDbLdap::findByUsername($this->username);
}
return $this->_user;
}
validatePassword()
目前,以下validatePassword函数对我不起作用,因为在我的实例中,AD必须针对userprincipalname
而不是samaccount
名称进行身份验证。
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user || !$user->validatePassword($this->password)) {
$this->addError($attribute, 'Incorrect username or password.');
}
}
}
答案 0 :(得分:0)
这是一个解决方法,感谢Edvlerblog \ Adldap2最近发布了3.0.5解决了几个问题,并在自述文档中提供了一些示例。
请注意添加findByAttribute(),允许以下内容:
$this->_user = \Edvlerblog\Adldap2\model\UserDbLdap::findByUsername($this->username);
validatePassword()w / userprincipalname
public function validatePassword($attribute, $params)
{
if (!$this->hasErrors()) {
$user = $this->getUser();
if (!$user) {
$this->addError('username', 'Incorrect username.');
} else {
// Note: queryLdapUserObject is a cached object,
// so the ldap fetch does not get called :-).
$userprincipalname = $this->_user->queryLdapUserObject()->getAttribute('userprincipalname');
$auth = Yii::$app->ad->auth()->attempt($userprincipalname[0], $this->password);
if (!$auth) {
$this->addError('password', 'Incorrect password.');
}
}
}
}