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,只需做好两点:
- 初始化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));
- 登录成功后,后续请求复用同一个DIO实例,Cookie会自动携带以维持会话。
- 若需持久化会话(APP重启后保持登录),用
PersistCookieJar替代CookieJar,将Cookie存到本地安全位置,避免重启丢失。
额外注意事项
- 强制HTTPS:确保Odoo实例启用HTTPS,防止凭证传输时被窃听。
- 错误提示:捕获数据库不存在、账号密码错误、网络异常等常见问题,给用户明确反馈。
- 过期处理:监听后续请求的401状态码,触发重新登录流程。
内容的提问来源于stack exchange,提问作者JAY EFFE
相关产品推荐
相关产品推荐

