You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter对接Odoo ERP系统的登录实现方案咨询

Odoo ERP 登录对接方案(基于DIO库)

核心登录逻辑实现

Odoo的登录接口为/web/session/authenticate,需POST携带以下参数:

  • db:用户输入的数据库名称
  • login:用户名
  • password:用户输入的密码

用DIO实现的示例代码:

import 'package:dio/dio.dart';

Future<bool> odooLogin(String db, String username, String password) async {
  try {
    final dio = Dio();
    // 替换为你的Odoo实例地址
    const baseUrl = 'https://your-odoo-instance.com';
    
    final response = await dio.post(
      '$baseUrl/web/session/authenticate',
      data: {
        'jsonrpc': '2.0',
        'method': 'call',
        'params': {
          'db': db,
          'login': username,
          'password': password,
        },
      },
    );

    // 校验登录结果
    if (response.data['result'] != null) {
      // 登录成功,会话已通过Cookie维持
      return true;
    }
    return false;
  } catch (e) {
    print('登录失败: $e');
    return false;
  }
}

密码隐藏处理

  • 输入层隐藏:UI输入框使用密码类型,比如Flutter的TextField设置obscureText: true,避免输入时明文显示。
  • 禁止硬编码:绝对不要将密码写死在代码或明文配置文件中,始终从用户输入或安全存储获取。
  • 安全存储(可选):若需记住密码,用平台原生安全存储方案(如Flutter的flutter_secure_storage),将加密后的密码存在iOS Keychain或Android Keystore,而非SharedPreferences这类明文存储。

Cookie会话维持

DIO默认支持自动管理Cookie,只需做好两点:

  1. 初始化DIO时挂载Cookie管理器:
import 'package:dio_cookie_manager/dio_cookie_manager.dart';
import 'package:cookie_jar/cookie_jar.dart';

// 全局复用的DIO实例,后续所有请求用它
final dio = Dio();
final cookieJar = CookieJar();
dio.interceptors.add(CookieManager(cookieJar));
  1. 登录成功后,后续请求复用同一个DIO实例,Cookie会自动携带以维持会话。
  2. 若需持久化会话(APP重启后保持登录),用PersistCookieJar替代CookieJar,将Cookie存到本地安全位置,避免重启丢失。

额外注意事项

  • 强制HTTPS:确保Odoo实例启用HTTPS,防止凭证传输时被窃听。
  • 错误提示:捕获数据库不存在、账号密码错误、网络异常等常见问题,给用户明确反馈。
  • 过期处理:监听后续请求的401状态码,触发重新登录流程。

内容的提问来源于stack exchange,提问作者JAY EFFE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:42:10