Yii:如何使用 userprincipalname 而不是 samaccountname 验证 Edvlerblog\Adldap2 的密码
Yii: How to validatePassword with Edvlerblog\Adldap2 using userprincipalname instead of samaccountname
问题
目前正在寻找其他人在需要使用 userprincipalname
而不是使用 samaccountname
.[=19= 的 Edvlerblog\Adldap2 validatePassword 函数进行身份验证时如何处理验证密码功能]
Please provide feedback in the comments if you are struggling with
anything specific so we can update the documentation.
当前实施
对于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 函数对我不起作用,因为在我的实例中,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.');
}
}
}
一个解决方案
感谢 Edvlerblog\Adldap2 最近发布的 3.0.5 解决了几个问题并在他的自述文档中提供了一些示例,这是一个解决方法。
请注意 findByAttribute() 的添加,允许以下内容:
$this->_user = \Edvlerblog\Adldap2\model\UserDbLdap::findByUsername($this->username);
validatePassword() w/ userprincipalname
更新您的登录模型:common\models\LoginForm.php
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.');
}
}
}
}
getUser() w/userprincipalname
/**
* Finds user by [[username]]
*
* @return User|null
*/
protected function getUser()
{
if ($this->_user === null) {
$this->_user = \Edvlerblog\Adldap2\model\UserDbLdap::findByUsername($this->username);
}
return $this->_user;
}
Yii2 ldap 组件配置
参考:https://github.com/Adldap2/Adldap2/blob/master/docs/configuration.md
在您的 frontend\config\main
中配置:
'components' => [
'log' => [... ],
'authManager' => [... ],
'ad' => [
'class' => 'Edvlerblog\Adldap2\Adldap2Wrapper',
'providers' => [
'default' => [
'autoconnect' => true,
'config' => [
'domain_controllers' => ['your.ldap.domain.com'],
'base_dn' => "OU=XXX,OU=XXX,DC=ccccccc,DC=xxxx,DC=com",
'admin_username' => "your_username",
'admin_password' => "your_password",
'port' => 389,
],
],
],
],
],
问题
目前正在寻找其他人在需要使用 userprincipalname
而不是使用 samaccountname
.[=19= 的 Edvlerblog\Adldap2 validatePassword 函数进行身份验证时如何处理验证密码功能]
Please provide feedback in the comments if you are struggling with anything specific so we can update the documentation.
当前实施
对于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 函数对我不起作用,因为在我的实例中,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.');
}
}
}
一个解决方案
感谢 Edvlerblog\Adldap2 最近发布的 3.0.5 解决了几个问题并在他的自述文档中提供了一些示例,这是一个解决方法。
请注意 findByAttribute() 的添加,允许以下内容:
$this->_user = \Edvlerblog\Adldap2\model\UserDbLdap::findByUsername($this->username);
validatePassword() w/ userprincipalname
更新您的登录模型:common\models\LoginForm.php
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.');
}
}
}
}
getUser() w/userprincipalname
/**
* Finds user by [[username]]
*
* @return User|null
*/
protected function getUser()
{
if ($this->_user === null) {
$this->_user = \Edvlerblog\Adldap2\model\UserDbLdap::findByUsername($this->username);
}
return $this->_user;
}
Yii2 ldap 组件配置
参考:https://github.com/Adldap2/Adldap2/blob/master/docs/configuration.md
在您的 frontend\config\main
中配置:
'components' => [
'log' => [... ],
'authManager' => [... ],
'ad' => [
'class' => 'Edvlerblog\Adldap2\Adldap2Wrapper',
'providers' => [
'default' => [
'autoconnect' => true,
'config' => [
'domain_controllers' => ['your.ldap.domain.com'],
'base_dn' => "OU=XXX,OU=XXX,DC=ccccccc,DC=xxxx,DC=com",
'admin_username' => "your_username",
'admin_password' => "your_password",
'port' => 389,
],
],
],
],
],