【问题标题】:Retrieve hashed password in Odoo 13 using API使用 API 在 Odoo 13 中检索散列密码
【发布时间】:2021-01-02 05:14:15
【问题描述】:

在 Odoo 11 中,我可以从 res_users 表中的 password_crypt 字段中检索散列密码,但这在 Odoo 13 中不起作用更多。

我使用 Odoo 11 凭据登录到无法集成到 Odoo 中的其他应用程序。此身份验证停止工作,因为密码似乎是只写的。现在我正在寻找一种方法来获得对 Odoo 密码的读取权限,知道如何使用 API 做到这一点吗?

我使用以下python测试代码,但密码字段为空:

import xmlrpclib

common = xmlrpclib.ServerProxy('{}/xmlrpc/2/common'.format(url))
uid = common.authenticate(db, username, password, {})
models = xmlrpclib.ServerProxy('{}/xmlrpc/2/object'.format(url))

user = models.execute_kw(db, uid, password,
    'res.users', 'search_read',
    [[['id', '=', 2]]],
    {})[0]

print user

知道如何读取只写散列密码吗?

【问题讨论】:

    标签: python api odoo xml-rpc odoo-13


    【解决方案1】:

    由于 res.users 上的 read() 方法被覆盖以排除某些字段,例如密码字段,我会(不*)建议在 res.users 上创建一个方法,该方法执行如下 SQL 读取:

    def read_password(self):
        self.ensure_one()
        self.env.cr.execute("SELECT password FROM res_users WHERE id=%s", self.id)
    

    *免责声明:Odoo 隐藏密码字段是有原因的,因此您实际上是在绕过 Odoo 的安全性。您需要三重确保此方法 100% 安全。一些想法:

    • 添加对正确 API 密钥的检查
    • 只允许特定用户执行此方法
    • 只允许某个IP源执行该方法

    【讨论】:

      猜你喜欢
      • 2017-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-23
      • 2019-02-15
      • 1970-01-01
      相关资源
      最近更新 更多