在 TYPO3 CMS 扩展中添加带密码的 BE 用户
Add BE user with password in TYPO3 CMS extension
我已经在自己的 TYPO3 CMS 8.7.0 扩展中成功创建了一个 BE 用户。
存储库注入:
/**
* beUserRepository
*
* @var \TYPO3\CMS\Extbase\Domain\Repository\BackendUserRepository
* @inject
*/
protected $beUserRepository = null;
ActionController 的一部分:
$beuser = new \TYPO3\CMS\Extbase\Domain\Model\BackendUser();
$beuser->setUserName($username);
$beuser->setEmail($email);
$beuser->setRealName($realname);
$this->beUserRepository->add($beuser);
这工作正常,但我无法像 setPassword()
的 FE 用户那样添加密码。有什么方法可以到达那里,还是出于安全原因限制为 set/change BE 用户密码?
在您的扩展程序中创建您自己的 BackendUser 模型
<?php
namespace YourVendor\YourExtKey\Domain\Model;
class BackendUser extends \TYPO3\CMS\Extbase\Domain\Model\BackendUser
{
/**
* @var string
*/
protected $password = '';
/**
* Returns the password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Sets the password
*
* @param string $password
* @return void
*/
public function setPassword($password)
{
$this->password = (string)$password;
}
}
创建您自己的存储库
<?php
namespace YourVendor\YourExtKey\Domain\Repository;
class BackendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\BackendUserRepository
{
}
然后将您的新域模型映射到 be_users table:
plugin.tx_yourExtKey {
persistence {
classes {
YourVendor\YourExtKey\Domain\Model\BackendUser {
mapping {
tableName = be_users
}
}
}
}
}
更新您的控制器以使用您的新存储库
/**
* beUserRepository
*
* @var \YourVendor\YourExtKey\Domain\Repository\BackendUserRepository
* @inject
*/
protected $beUserRepository;
回到行动中
$beUser = new \YourVendor\YourExtKey\Domain\Model\BackendUser();
$saltFactory = \TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance('', 'BE');
$beUser->setPassword($saltFactory->getHashedPassword($newPassword));
TYPO3\CMS\Extbase\Domain\Model\BackendUser
没有密码属性,所以不扩展模型是不能设置密码的。最简单的方法是,如果您在扩展 TYPO3\CMS\Extbase\Domain\Model\BackendUser
的扩展中创建自己的 BackendUser
模型并在 TS 中配置映射。它只需要 $password
属性 和 getters/setters 以及一个存储库。
我已经在自己的 TYPO3 CMS 8.7.0 扩展中成功创建了一个 BE 用户。
存储库注入:
/**
* beUserRepository
*
* @var \TYPO3\CMS\Extbase\Domain\Repository\BackendUserRepository
* @inject
*/
protected $beUserRepository = null;
ActionController 的一部分:
$beuser = new \TYPO3\CMS\Extbase\Domain\Model\BackendUser();
$beuser->setUserName($username);
$beuser->setEmail($email);
$beuser->setRealName($realname);
$this->beUserRepository->add($beuser);
这工作正常,但我无法像 setPassword()
的 FE 用户那样添加密码。有什么方法可以到达那里,还是出于安全原因限制为 set/change BE 用户密码?
在您的扩展程序中创建您自己的 BackendUser 模型
<?php
namespace YourVendor\YourExtKey\Domain\Model;
class BackendUser extends \TYPO3\CMS\Extbase\Domain\Model\BackendUser
{
/**
* @var string
*/
protected $password = '';
/**
* Returns the password
*
* @return string
*/
public function getPassword()
{
return $this->password;
}
/**
* Sets the password
*
* @param string $password
* @return void
*/
public function setPassword($password)
{
$this->password = (string)$password;
}
}
创建您自己的存储库
<?php
namespace YourVendor\YourExtKey\Domain\Repository;
class BackendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\BackendUserRepository
{
}
然后将您的新域模型映射到 be_users table:
plugin.tx_yourExtKey {
persistence {
classes {
YourVendor\YourExtKey\Domain\Model\BackendUser {
mapping {
tableName = be_users
}
}
}
}
}
更新您的控制器以使用您的新存储库
/**
* beUserRepository
*
* @var \YourVendor\YourExtKey\Domain\Repository\BackendUserRepository
* @inject
*/
protected $beUserRepository;
回到行动中
$beUser = new \YourVendor\YourExtKey\Domain\Model\BackendUser();
$saltFactory = \TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance('', 'BE');
$beUser->setPassword($saltFactory->getHashedPassword($newPassword));
TYPO3\CMS\Extbase\Domain\Model\BackendUser
没有密码属性,所以不扩展模型是不能设置密码的。最简单的方法是,如果您在扩展 TYPO3\CMS\Extbase\Domain\Model\BackendUser
的扩展中创建自己的 BackendUser
模型并在 TS 中配置映射。它只需要 $password
属性 和 getters/setters 以及一个存储库。