【问题标题】:Add BE user with password in TYPO3 CMS extension在 TYPO3 CMS 扩展中添加带密码的 BE 用户
【发布时间】:2017-04-19 14:34:32
【问题描述】:

我已经在自己的 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);

这很好用,但我无法为 FE 用户添加setPassword() 的密码。是否有任何方法可以到达那里,或者出于安全原因限制设置/更改 BE 用户密码?

【问题讨论】:

    标签: php security typo3 extbase


    【解决方案1】:

    在您的扩展程序中创建您自己的 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 表:

    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::setPassword() - 你能用你的 $user 定义添加行吗?!
    • 你好皮特。那是另一个故事。我已经更新了我的答案。希望对您有所帮助。
    【解决方案2】:

    TYPO3\CMS\Extbase\Domain\Model\BackendUser没有密码属性,所以不扩展模型就不能设置密码。最简单的方法是,如果您在扩展 TYPO3\CMS\Extbase\Domain\Model\BackendUser 的扩展中创建自己的 BackendUser 模型并在 TS 中配置映射。它只需要拥有带有 getter/setter 和存储库的 $password 属性。

    【讨论】:

    • 在 TYPO3 数据处理程序的情况下你是对的,但 extbase 有它自己的持久性。请使用单词“password”通过extbase进行递归搜索,您只会找到一些setter,但DataMapper中没有密码的结果。因此,散列不会在 extbase 上下文中自动完成。
    • 您对哈希的看法是正确的。我一定把它误认为是 eval=md5 的旧的 pre 4.5 TCA 配置,后端不再需要它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多