从外部 php 系统登录 Odoo

2024-04-12

我有一个要求,我需要从外部 php 系统重定向到 Odoo,并且用户也应该登录。我想到了以下两种方法来完成此任务:

  1. 来自 php 端的 url 重定向,它调用特定的控制器,并沿着 url 传递凭据,由于显而易见的原因,这不是一个安全的选项

  2. 从 php 使用 xmlrpc 调用方法,并从 php 传递必要的参数,使用参数登录,然后在此处的方法中调用重定向。必须进一步检查此方法是否有效,因为在 odoo 中进行重定向时,控制器和正常功能以不同的方式工作。

请建议哪种方法更好,或者是否有其他方法可以更简单地完成此任务。并且,在 openerp/service/common.py 中添加一个新方法并调用该方法是否有意义,然后可以从那里重定向到 odoo 登录页面?

希望以上内容有所帮助,也希望这对 Odoo 中常见的其他外部系统集成查询有所帮助。

感谢致敬, 亚辛·谢里夫


在你的 php 代码中你可以进行 jsonrpc 调用/web/session/authenticate并接收响应中的session_id。您可以在重定向中将 session_id 作为 url 的哈希值传递。在 odoo 中创建一个页面,使用 javascript 读取哈希值并写入 cookie"session_id=733a54f4663629ffb89d3895f357f6b1715e8666"(显然是一个例子)到您的 odoo 页面上的浏览器。此时,您应该能够以您在 php 代码中验证的用户身份在 odoo 中导航。

    from requests import Request,Session
    import json

    base_url = "127.0.0.1:8069"
    url = "%s/web/session/authenticate" % base_url
    db = <db_name>
    user = <login>
    passwd = <password>

    s = Session()

    data = {
        'jsonrpc': '2.0',
        'params': {
            'context': {},
            'db': db,
            'login': user,
            'password': passwd,
        },
    }

    headers = {
        'Content-type': 'application/json'
    }

    req = Request('POST',url,data=json.dumps(data),headers=headers)
    prepped = req.prepare()
    resp = s.send(prepped)

    r_data = json.loads(resp.text)
    session_id = r_data['result']['session_id']

此示例使用普通卷曲。我知道这不是 php,但是我稍后可能会针对 php 更新这篇文章。但原则仍然成立。只需将这个curl转换为php即可。

如何通过重定向传递此 session_id 由您决定。您需要警惕一些安全问题。因此,请小心不要不安全地传递 session_id,否则有人可能会嗅到它并成为您的登录用户。

这是一个示例(未经测试),您必须创建类似于我上面提供的curl示例的json编码字符串。希望这可以帮助。

$data = <your_json_data>
$data_string = json_encode($data);                                                                                   

$ch = curl_init('http://127.0.0.1:8069/web/session/authenticate');                                                                      
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                                                                     
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                                                                  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                                                                      
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                                                                          
    'Content-Type: application/json',                                                                                
    'Content-Length: ' . strlen($data_string))                                                                       
);                                                                                                                   

$result = curl_exec($ch);

一旦你有了你的session_id您将重定向到 odoo 服务器到由插件中的控制器处理的路由。

控制器

imports ...

class MyAddon(http.Controller):

@http.route('/path/for/controller', type='http', auth='public', website=True)
def ext_login_redirect(self, **kw):
    return http.request.render('myaddon.template',{})

重要的是,url 中的哈希值包含您在 php.ini 中获得的 session_id。

你的模板your_template.xml

<openerp>
    <data>
        <template id="template" name="Redirect Template" page="True">
            document.cookie = "session_id=" + window.location.hash;
            window.location = "127.0.0.1:8069/web";
        </template>
    </data>
</openerp>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从外部 php 系统登录 Odoo 的相关文章

随机推荐

  • Bourbon/Sass:#{$all-text-inputs} 带有悬停或焦点?

    根据波本文档 http thoughtbot com bourbon html5 input types 您可以使用 all text inputs 转动这个 all text inputs border 1px solid green 进
  • 是否可以选择以假的方式列出目标(可能带有描述)?

    在 Ruby RAKE 中 您可以通过以下方式记录您的任务 rakefile desc cleans temp task clean do p cleaning end desc compile the source task compil
  • 复制已过滤的数据子集:合并或事务复制?

    首先感谢您的阅读 我需要复制基于连接过滤器的数据子集 基于与其他表的联接的过滤器 Microsoft 使用联接过滤器 您可以将行过滤器从一个已发布的表扩展到另一个 这是设置 SQL Server 2012 事务复制订阅上的复制源 复制需要是
  • SSRS 2014 数据库设置 - 错误“使用其他版本的 SQL Server 作为报表数据源...”不受支持

    我正在 Windows Server 2012 R2 服务器上设置新的 SQL Server 2014 Enterprise Reporting Services 实例 在 Reporting Services 配置管理器中 当我选择要在其
  • 使更新进度面板位于中心

    我对更新进度面板有疑问 我想在屏幕中间安装更新进度面板 谁能建议我 这样做的想法是什么 您可以使用 css 来做到这一点
  • Environment.Exit 和 Main 中的简单返回 2 之间的区别

    从应用程序外部来看 两者之间有什么区别吗 Environment Exit 2 and static int Main return 2 最明显的区别是您可以从代码中的任何位置调用Environment Exit 除此之外 如果还有其他前台
  • 在 C# 中打印表单/用户控件

    我的计划 包含一个带有几个文本框和一个按钮的表单 默认打印机 设置为Adobe PDF在我的电脑上 My Goal 想要在用户单击 打印 按钮时截取表单 用户控件的屏幕截图 然后屏幕截图将以 pdf 格式保存在桌面上 我的问题 我的代码有以
  • 如何使用itextsharp从表结构PDF中读取数据?

    我在从 pdf 文件读取某些数据时遇到问题 我的文件是结构化的 它包含表格和纯文本 标准解析器从同一行的不同列读取数据 例如 Some Table Header Data Col1a Data Col2a Data Col3a Data C
  • 反应孩子与父母的沟通问题

    我正在构建一个猜谜游戏 其中问题和选择逻辑位于名为 问题 的组件中 我无法让应用程序读取问题代码 我希望应用程序中的状态根据子组件中的选择进行更新 我一直在尝试对解决方案进行逆向工程ReactJS中如何将数据从子组件传递到父组件 https
  • 使用 Schedulers 时,System.out.println 在 RxJava 中不打印任何内容

    我正在摆弄 RxJava 和调度程序 我用调度程序实现了一个非常简单的流 Observable just 1 2 3 doOnNext v gt Thread currentThread getName subscribeOn Schedu
  • 包 org.apache.commons.io 不存在错误

    我正在使用 ant 编译器编译 java 文件 我收到以下错误 包 org apache commons io 不存在错误 我下载了 apache Commons IO 二进制文件并将 jar 文件粘贴到 C Program Files J
  • pyshark - 来自 TCP 数据包的数据

    有没有办法使用 pyshark 获取 TCP 数据包的有效负载 我正在尝试比较多个 TCP 流中不同数据包的数据部分 但我找不到获取数据包数据的方法 pkt tcp data似乎不存在 如果您使用的是 pcap 文件 则在使用以下命令读取该
  • Autofixture 测试无效的构造函数参数

    我有以下课程和测试 我想测试将空值作为参数传递给构造函数并期待ArgumentNullException 但由于我使用 AutofixtureCreateAnonymous方法我得到一个TargetInvocationException反而
  • Mac OS 上“导入 cv”期间出现“分段错误”

    尝试在我的 Mac 上从源代码编译 opencv 我有以下 CMakeCache txt http pastebin com KqPHjBx0 http pastebin com KqPHjBx0 I make ccmake press c
  • 如何使用 Mongoid 更新 Rails 中嵌套的 Mongo 文档属性?

    如果这个问题缺乏细节 请提前道歉 我会看评论并添加我能添加的内容 我有一个具有以下内容的模型 class Product include Mongoid Document include Mongoid Timestamps field d
  • 运行模拟器时出错:架构 i386 的重复符号

    我添加了 ShareKit 框架来尝试 这是在模拟器中运行它的错误 duplicate symbol LFHRReadStreamClientCallBack in Xcode DerivedData build Objects norma
  • eclipse 无法删除某些断点

    双击eclipse左侧的蓝色条设置断点 再次双击可删除断点 这对我来说非常有用 但如果我使用 git 来签出不同的分支 通常断点的蓝点会变得 混乱 或其他什么 我无法再双击来取消它们 我被迫进入调试视角 并在 断点 视图中找到断点 然后右键
  • C# 正则表达式匹配带点的单词

    敏捷的棕色狐狸跳过了 懒狗 是英语 全字母表 字母表 也就是一个短语 包含所有字母 字母表 它已被用来测试 打字机字母表 和电脑 键盘和其他应用程序 涉及到所有的字母 英文字母表 我需要得到 字母表 正则表达式中的单词 上面的文字中有3个实
  • Telerik 报告不起作用

    处理报表 ReportStandart 时发生错误 无法建立与数据库的连接 请验证您的连接字符串是否有效 如果您使用应用程序配置文件中的命名连接字符串 请确保名称正确并且连接字符串设置存在于应用程序的配置文件中 内部异常 转到报表项目所在的
  • 从外部 php 系统登录 Odoo

    我有一个要求 我需要从外部 php 系统重定向到 Odoo 并且用户也应该登录 我想到了以下两种方法来完成此任务 来自 php 端的 url 重定向 它调用特定的控制器 并沿着 url 传递凭据 由于显而易见的原因 这不是一个安全的选项 从