使用钉钉Oauth2授权登录Odoo配置

news/2024/7/7 19:09:30/文章来源:https://www.cnblogs.com/xtanuiha/p/18283641

准备工作

需要用到的模块:
Odoo/auth_oauth
OCA/server-auth/auth_oidc

因为钉钉的Oauth授权流程比较特殊,需要继承改造res.users上的几个方法

models\res_users.py

class ResUsers(models.Model):_inherit = "res.users"dingtalk_userid = fields.Char('Dingtalk User ID', copy=False)# 授权回调后换取acccess_tokendef _auth_oauth_get_tokens_auth_code_flow(self, oauth_provider, params):if 'dingtalk' in oauth_provider.auth_endpoint:# https://openid.net/specs/openid-connect-core-1_0.html#AuthResponsecode = params.get("code")# https://openid.net/specs/openid-connect-core-1_0.html#TokenRequestauth = Noneif oauth_provider.client_secret:auth = (oauth_provider.client_id, oauth_provider.client_secret)response = requests.post(oauth_provider.token_endpoint,json=dict(clientId=oauth_provider.client_id,clientSecret=oauth_provider.client_secret,grantType="authorization_code",code=code,),auth=auth,timeout=10,)response.raise_for_status()response_json = response.json()# https://openid.net/specs/openid-connect-core-1_0.html#TokenResponsereturn response_json.get("accessToken"), response_json.get("refreshToken")else:return super()._auth_oauth_get_tokens_auth_code_flow(oauth_provider, params)@api.modeldef auth_oauth(self, provider, params):oauth_provider = self.env["auth.oauth.provider"].browse(provider)if oauth_provider.flow == "id_token_code" and 'dingtalk' in oauth_provider.auth_endpoint:access_token, refresh_token = self._auth_oauth_get_tokens_auth_code_flow(oauth_provider, params)if not access_token:_logger.error("No access_token in response.")raise AccessDenied()# 获取unionidresp = requests.get(oauth_provider.validation_endpoint, headers={'x-acs-dingtalk-access-token': access_token})res = resp.json()if resp.status_code != 200:_logger.error("Failed to get user info.\n" % res)raise AccessDenied()# 通过unionid换取钉钉用户iddingtalk_userid = self.env['dingtalk.client'].get_userid_by_unionid(res['unionId'])if not dingtalk_userid:raise AccessDenied()# 查询内部用户user_id = self.env['res.users'].sudo().search([('dingtalk_userid', '=', dingtalk_userid)], limit=1)if not user_id.login:raise AccessDenied()user_id.write({'oauth_uid': res['unionId'], 'oauth_access_token': access_token})self.delete_other_session()# return user credentialsreturn (self.env.cr.dbname, user_id.login, access_token)else:return super().auth_oauth(provider, params)

需要预先用服务端接口把钉钉的userid同步进odoo上

controllers\oauth_login.py

# -*- coding: utf-8 -*-from odoo.addons.auth_oauth.controllers.main import OAuthLoginclass DingtalkAuthLogin(OAuthLogin):# 针对钉钉授权登录中的prompt参数,配置在auth_endpoint里:https://login.dingtalk.com/oauth2/auth?prompt=consentdef list_providers(self):providers = super().list_providers()for provider in providers:if provider['auth_link'].count('?') > 1:auth_params = provider['auth_link'].split('?')provider['auth_link'] = '%s?%s' % (auth_params[0], '&'.join(auth_params[1:]))return providers

Oauth配置

配置后的效果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/738032.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一款Win11主题WPF UI框架

最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的Fluent Design UI设计,为用户带来全新的视觉体验。最近在微软商店,官方上架了新款Win11风格的WPF版UI框架【WPF Gallery Preview 1.0.0.0】,这款应用引入了前沿的…

图论总结

重链剖分 树上修改,查询路径信息之类的 最多经过logn个轻边, 这样可以更好地划分 注意点: 修改边权可以转化到点权上面: 注意lca的位置不要修改, 应该是update(id[y]+1,id[x]) 例题: 轻重边: https://www.luogu.com.cn/problem/P7735 判断是不是重边,信息转化到点上面,…

logstach 8.6.2输出到mongo 6

logstach官网下载:https://www.elastic.co/cn/downloads/past-releases 1、查看logstach有没有自带输出到mongo的插件,到logstach安装目录/bin下cd /data/logstash-8.6.2/bin/ ./logstash-plugin list --verbose2、没有自带输出到mongo的插件就安装./logstash-plugin install…

模拟集成电路设计系列博客——8.4.3 数控振荡器

8.4.3 数控振荡器 在之前的章节中,我们介绍了一种简单得基于LC振荡器得数控振荡器方式,通过开关控制谐振电路中的电容值实现数控频率方式。 另一种更直接的利用模拟PLL中的LC振荡器VCO的方式是直接通过DAC的方式将数字码转换成模拟量,然后对电容施加控制。值得一提的是这种压…

android 性能优化 -systrace

简介: Systrace允许监视和跟踪Android系统的行为(trace)。它会指明系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至可以看到每个线程、进程在指定时间内都在干嘛。它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供建议的解决方案。但是不能…

故地重游

近来,种种原因让我总觉得对任何事都失去了兴趣,整个人犹如失去灵魂的躯壳一般。一切都在往前走,但我想更快一些却无能为力,比较稳定的环境也就注定了过程的时长,又没有改变当下的勇气,每每思量心猿四起,无法自拔。本诗在故地重游(初到京第一工作地)所做,一步步走在那…

pip安装问题记录

【问题1】 pip安装某第三方库的时候报错:metadata-generation-failed解决办法: 1、确保你的pip和setuptools是最新版本:pip install --upgrade pip setuptools 2. setuptools版本不适配,不能进行构建: pip install --upgrade setuptools==57.5.0

P2286 [HNOI2004] 宠物收养场 题解

P2286 [HNOI2004] 宠物收养场 题解 set 做法P2286 [HNOI2004] 宠物收养场 set做法 题链\(_{洛谷}\) \(_{题库}\) 思路 一眼查找前驱后继的题。注意到一句话:那么用 set 就没有什么阻碍了,方便又快捷。 题意很简单,若宠物多则查找与人需求最接近的上下两个值,人多则找与宠…

Dijkstra算法理解-无人机路径规划

1、理解 Dijkstra算法是路径规划算法中非常经典的一种算法,在很多地方都会用到,特别是在机器人的路径规划中,基本学习机器人运动相关的都会接触到该算法。 Dijkstra算法本身的原理是基于贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的…

Three.js

右手坐标系 //每秒转一圈 const clock = new THREE.Clock() function tick() {const time = clock.getElapsedTime()mesh.rotation.y = time * Math.PI * 2 //一秒转一圈renderer.render(scene, camera)window.requestAnimationFrame(tick) } tick()const client = {x: 0,y: 0 …

关于古书介绍上“单鱼尾”是什么?

在阅读一些古书时,读的往往时某些版本的综合刊定版,而介绍有关原版时,会出现这个词语“单鱼尾”或者双鱼尾,这是什么意思呢? 搜索发现,原来古书也不是一页页,单页的,而是双页印刷,然后中间折叠,装订成册的。而折叠的具体位置在哪呢?就由鱼尾型标志标明,显然鱼尾最凹…

数据特征采样在 MySQL 同步一致性校验中的实践

本文介绍了当前DTS应用中,MySQL数据同步使用到的数据一致性校验工具,并对它的实现思路进行分享。作者:vivo 互联网存储研发团队 - Shang Yongxing本文介绍了当前DTS应用中,MySQL数据同步使用到的数据一致性校验工具,并对它的实现思路进行分享。 一、背景 在 MySQL 的使用过…

什么是容器镜像?

镜像是容器的模板,容器运行需要借助镜像来装载环境。镜像描述了容器所需的运行时环境,我们以Docker镜像为例来了解镜像到底是什么。Docker镜像实际上是由一层一层的文件系统构成,这种层级的文件系统称为UnionFS。UnionFS文件系统是一种分层、轻量级并且高性能的文件系统,它…

字符串相似度算法完全指南:编辑、令牌与序列三类算法的全面解析与深入分析

在自然语言处理领域,人们经常需要比较字符串,这些字符串可能是单词、句子、段落甚至是整个文档。如何快速判断两个单词或句子是否相似,或者相似度是好还是差。这类似于我们使用手机打错一个词,但手机会建议正确的词来修正它,那么这种如何判断字符串相似度呢?本文将详细介…

Avalonia应用在基于Linux的国产操作deepin上运行

本文介绍了Avalonia应用如何在基于Linux的国产操作deepin上运行。deepin系统介绍 deepin(原名Linux Deepin)致力于为全球用户提供美观易用,安全可靠的 Linux发行版。deepin项目于2008年发起,并在2009年发布了以 linux deepin为名称的第一个版本。2014年4月更名为 deepin,在中…

java中的测试片段和include控制器使用

1.作用 可复用,提高测试计划的可维护性和效率。 2.具体使用 2.1在jmeter中将写好的一组请求保存为测试片段,保存到一个jmx文件 2.2新建一个线程组,添加include控制器,选择刚刚保存的测试片段文件即可将刚刚的测试片段重用。

splay-前驱后继

在平衡树中,经常会让我们查一下一个值的前驱或后继是谁,写两个函数就非常麻烦好吧,所以这里咱们用一点小技巧来让他变 成一个函数(这里的前驱后继定义时包括与本身相等的值) 代码点击查看代码 int nxt(int k){if(!m[rt].size) return 0;int root=rt;while(k!=m[root].val&…

softlockup detector

1 简介 从内核稳定性问题的角度来看内核安全,是基础,也是必备技能。很多时候,一个内核稳定性问题,就是造成系统安全的罪魁祸首。 当出现异常死锁、Hang up、死机等问题时,watchdog的作用就很好的体现出来。Watchdog主要用于监测系统运行情况,一旦出现以上异常情况,就会重…

drduino串口通信中文乱码

​ 第一次使用 Arduino 板学习时,遇到了串口工具接收乱码的问题。 最初认为可能是数据位或停止位设置不正确。当前设置如下:波特率:9600 数据位:8 校验位:无 停止位:1在 Arduino 代码中使用 Serial.begin(9600) 进行初始化。 Serial.begin(9600):- 波特率:9600- 数据位…

合理利用符号,用负反馈解决正反馈系统

首先,系统框图:此处的Kyrg当成是1,aircraft的状态方程系数为:A=[-0.0558 -0.9968 0.0802 0.0415; 0.598 -0.115 -0.0318 0; -3.05 0.388 -0.4650 0; 0 0.0805 1 0]; B=[0.00729 -0.475 0.153 0]; C=[0 1 0 0]; D=0;使用函数ss2tf和tf求出系统的传递函数为:sysGs =-0.475 …