首页 > 解决方案 > 如何从 laradoo 包中的 res.users 模型对用户进行身份验证

问题描述

我已经在我的项目中安装了这个laradooLaravel,它将连接到 odoo DB。我已经连接到数据库,但现在我无法从res.users model. 因为当我尝试使用以下代码获取用户信息时。

$odoo = new \Edujugon\Laradoo\Odoo();
$odoo = $odoo->connect();
$models = $odoo->where('login', 'test@test.com')->fields('name','login','password')->get('res.users');
echo "<pre>";
print_r($models);

它在未返回密码的情况下给出以下响应。

Illuminate\Support\Collection Object
(
    [items:protected] => Array
        (
            [0] => Array
                (
                    [id] => 6
                    [name] => test
                    [login] => test@test.com
                    [password] => 
                )
         )
)

因此,我尝试了另一种方法,例如在 Laravel 上创建哈希并尝试像下面的代码一样进行身份验证

$odoo = new \Edujugon\Laradoo\Odoo();

$odoo = $odoo->connect();
$password = "12345";
$iterations = 1000;

// Generate a random IV using openssl_random_pseudo_bytes()
// random_bytes() or another suitable source of randomness
$salt = openssl_random_pseudo_bytes(16);

$hash = hash_pbkdf2("sha512", $password, $salt, $iterations, 20);

$models = $odoo->where('login', 'test@test.com')->where('password', $hash)->fields('name','login','password')->get('res.users');

echo "<pre>";
print_r($models);

但它不能正常工作。如果密码正确或错误,它将始终返回给用户。所以,如果你能帮助我从 odoo 获取密码或为 odoo 创建一个哈希值,res.users model那就太好了。

标签: phplaravelodoo

解决方案


如果您需要覆盖 laravel 散列以接受来自 odoo DB 的密码。您需要根据需要在 EloquentUserProvider.php 中修改以下函数

public function validateCredentials(UserContract $user, array $credentials)
    {
        $plain = $credentials['password'];

        $hash = hash('sha512',$plain);
        if($hash == $user->getAuthPassword() ){
            return true;

        }else{
            return false;
        }
    
        // return $this->hasher->check($plain, $user->getAuthPassword());
    }

推荐阅读