0

我正在开发一个使用 cakePHP 3 的网络应用程序。我的应用程序正在运行,我需要将 ejabberd 15.x 聊天添加到我的应用程序中。

我已将 jabber 配置为使用 odbc mysql 和用户数据库表(与 cakephp 使用的用户表相同)。

现在,问题是,我的网络应用程序可以使用 cakephp 的 bcrypt 密码哈希器很好地登录/注册用户。但是,由于密码是散列的,ejabberd 无法登录这些用户,因为它使用纯文本密码。

我可以在 cakephp 中禁用密码散列并使其以这种方式工作,但是,我更喜欢散列提供的额外安全性,并在 ejabberd 端启用完全相同的 bcrypt 散列,因此它可以使用 cakephp 生成的散列登录。

有没有办法使 ejabberd 和 cakephp3 哈希密码完全相同?

4

1 回答 1

0

创建一个扩展类AbstractPasswordHasher应该可以解决问题。遵循用于 的模式 FallbackPasswordHasher

http://api.cakephp.org/3.0/class-Cake.Auth.Abs​​tractPasswordHasher.html

然后配置您的系统以使用新类:

http://book.cakephp.org/3.0/en/controllers/components/authentication.html#chang-hashing-algorithms

(以下引用,作为示例)

更改散列算法

CakePHP 提供了一种将用户密码从一种算法迁移到另一种算法的简洁方法,这是通过 FallbackPasswordHasher 类实现的。假设您正在从使用 sha1 密码哈希的 CakePHP 2.x 迁移您的应用程序,您可以按如下方式配置 AuthComponent:

public function initialize()
{
    parent::initialize();
    $this->loadComponent('Auth', [
        'authenticate' => [
            'Form' => [
                'passwordHasher' => [
                    'className' => 'Fallback',
                    'hashers' => [
                        'Default',
                        'Weak' => ['hashType' => 'sha1']
                    ]
                ]
            ]
        ]
    ]);
}

hashers 键中出现的第一个名称表示哪个类是首选类,但如果检查不成功,它将回退到列表中的其他类。

于 2015-12-14T20:26:54.847 回答