“史上最快” 登入指南:Odoo 系统如何实现企微扫码登录


Odoo
神州数码云基地
在 Odoo 上的尝试、调研与分享
本期作者
zuokang
一名保持低调,保持进步的
后端开发
我们知道一般登录 Odoo 系统需要先在系统中维护好用户账号,本期就跟大家分享一下另一种快捷的登录方式——通过企业微信扫码登陆到 Odoo 系统。
#1 实现功能
1. 企业微信用户一键同步到 Odoo,节省 Odoo 用户的维护成本。
2. 企业微信用户通过扫二维码即可登陆到 Odoo 系统,提升用户使用体验,免去忘记密码的烦恼。
#2 环境配置
1. 一台外网能访问的服务器并配置域名,如果想本地调试可使用相关工具进行内网穿透,这样企业微信才能回调到 Odoo,我这里可以推荐钉钉的内网穿透工具 :
https://open.dingtalk.com/document/resourcedownload/http-intranet-penetration
2. Odoo 系统配置文件 odoo.conf 必须指定 db_name 数据库名称。
3. 企业微信管理后台。
#3 实现步骤
Step 1
获取企业微信连接器源码进行安装。
安装完之后配置连接器参数,如下图所示:
相应参数都可以在企业微信管理后台配置查询找到,下面是参数具体查找路径:
应用名称:自定义名称
企业id:进入企业微信管理后台—>我的企业—>企业信息—>企业ID
通讯录密钥:进入企业微信管理后台—>管理工具—>通讯录同步—>企业ID—>Secret 点击查看
应用agentid和应用密钥:进入企业微信管理后台(企业微信 (qq.com))—>应用管理—>应用—>添加自建应用—>创建完成后会显示 AgentId 和密钥 Secret。
应用跳转url:自建应用—>底部设置企业微信授权登录—>Web网页设置回调域(即可外网访问的 Odoo系统的域名)
Step 2
配置完成后点击右侧用户同步按钮,没问题的话会给出提示”用户同步成功“。
随后需要去用户那里看看,确认一下企业微信用户是否全部正常同步过来了。这里用户的同步逻辑是用户若在 Odoo 中存在则更新,不存在则新增。
Step 3
以上步骤都弄完了之后退出登陆,登陆页将会出现企业微信的二维码。
以后用户访问 Odoo 登陆页都将会显示企业微信的二维码,下方依然保留了账号密码的登陆方式,可进行切换。
以上就是企业微信连接器的用法,
下面就跟大家讲一下具体的代码实现原理。
#4 实现原理
企业微信api开发资料
企业微信 api 开发基础知识:开发前必读 - 接口文档 - 企业微信开发者中心
https://developer.work.weixin.qq.com/document/path/90664
获取token:获取access_token - 接口文档 - 企业微信开发者中心
https://developer.work.weixin.qq.com/document/path/91039
获取根据部门获取用户:获取部门成员 - 接口文档 - 企业微信开发者中心
https://developer.work.weixin.qq.com/document/path/90200
扫码授权登陆:开始开发 - 接口文档 - 企业微信开发者中心
https://developer.work.weixin.qq.com/document/path/91025
企业微信扫码登录接入流程图
Step 1
创建微信连接器模块。
Step 2
连接器 model:
access_token: 该字段用于持久化微信给的 access_token,因为微信的接口调用次数是有限制次数的,不宜频繁调用,持久化后便于以后重新获取,另一个作用就是利用这个字段对 token 进行分区,因为每个应用的 token 都是独立的。
redirect_url: 对应 Odoo 系统的访问域名,若有端口把端口也加上。
Step 3
获取企业微信通讯录的 access_token。
Step 4
根据通讯录的 access_token 获取企业微信的用户,这里我们就从根部门递归获取全员的数据,拿到企业微信的用户数据后将 name 和 userId 同步到 res_user 表的 name 和 login 中,框起来的部分是要注意的地方。
Step 5
在企业微信的模块中重写 web_login 相关的接口和页面,关于如何在 Odoo 的登陆页中内嵌登陆二维码可以参考上面的扫码授权登陆。
登陆页初始化的时候需要调接口获取我们自己配置的参数,拿到配置参数后才能根据配置构造我们的二维码。
Step 6
二维码构建完成后用户扫码后企业微信会根据我们配置的 redirect_url 跳转到我们的Odoo系统,即访问我们重写的 web_login 接口并附带上用户的 code 和 appid,在 web_login 接口中对用户的 code 进行消费和用户校验,全部通过后用户将会成功进入 Odoo 系统中。