ODOO路由里面的auth="user" 的使用
一、controller介绍:Controller层在odoo里面可以认为是控制器,根据url地址来控制后端的业务和前端的内容展示,我们一般偏向于叫路由控制,
它相当于内网和外网之间的防火墙,外网的请求到达控制器后,由控制器解析请求的url,再来匹配合适的内网业务方法。
二、auth:定义请求的权限,其值有'user','public','none'三种,
1、如果路由权限为user,则需要验证了登录用户信息后才可以访问;
2、如果路由权限为public,用户如果没有通过身份验证,当前请求将使用共享的Public用户访问;
3、如果路由权限为none,则表示开放访问,没有权限验证,使用这种方式要特殊注意,
有可能你访问odoo的时候还没有确定数据库连接资源;
最简单的例子:像这两种例子系统不会验证,直接请求路由就能进到接口里面去,这里不再赘述
from odoo import http
class Academy(http.Controller):
@http.route('/academy/academy', auth='public',type='http')
def index(self, **kw):
"""这里认证是public"""
return "Hello, world"
@http.route('/academy/academy/objects', auth='none',type='json')
def list(self, **kw):
"""这里没有认证"""
return http.request.render('academy.listing', {
'root': '/academy/academy',
'objects': http.request.env['academy.academy'].search([]),
})
三、功能点介绍: auth="user"的路由接口用法
则需要验证了登录用户信息后才可以访问
@http.route(['/data_test'], type='http', auth="user", csrf=False, website=True, sitemap=True, cors="*")
def data_iot(self, **kw):
"""
auth="user" 用户验证在请求头中加入
headers = {'X-Openerp-Session-Id': session_id}
:param kw:
:return:
"""return 'True'
案例:
1、假如请求头中不加入 headers = {'X-Openerp-Session-Id': session_id},系统会返回一个登录界面,

2、加入headers = {'X-Openerp-Session-Id': session_id}后接口返回的值为 True


总结:所以使用auth="user"认证,一定需要用户登录后才可以执行路由里面的逻辑
注意点:这里的session_id怎么获取,这里写了一个函数,调用原生登录的函数获取session
@http.route('/melon/web/authenticate', type='json', auth='none', methods=["POST"], csrf=False)
def melon_web_authenticate(self, *args, **post):
"""
请求参数格式:
{
"jsonrpc": "2.0",
"params": {
"login": "admin",
"password": "admin",
"db": "odoo15001"
}
}
在调用其他 auth="user"的路由接口时,在请求头中添加:
X-Openerp-Session-Id即可
"""
data = request.jsonrequest
data = data.get('params')
try:
login = data["login"]
except KeyError:
raise exceptions.AccessDenied(message='`login` is required.')
try:
password = data["password"]
except KeyError:
raise exceptions.AccessDenied(message='`password` is required.')
try:
db = data["db"]
except KeyError:
raise exceptions.AccessDenied(message='`db` is required.')
url_root = request.httprequest.url_root
AUTH_URL = "%sweb/session/authenticate/" % url_root
headers = {'Content-type': 'application/json'}
data = {
"jsonrpc": "2.0",
"params": {
"login": login,
"password": password,
"db": db
}
}
res = requests.post(
AUTH_URL,
data=json.dumps(data),
headers=headers
)
print(res.content)
try:
session_id = res.cookies["session_id"]
user = json.loads(res.text)
user["result"]["session_id"] = session_id
except Exception:
return "Invalid credentials."
return user["result"]
postman返回的参数是:
{
"jsonrpc": "2.0",
"id": null,
"result": {
"uid": 2,
"is_system": true,
"is_admin": true,
"user_context": {
"lang": "zh_CN",
"tz": "Europe/Brussels",
"uid": 2
},
"db": "odoo15001",
"server_version": "15.0",
"server_version_info": [
15,
0,
0,
"final",
0,
""
],
"support_url": "https://www.odoo.com/buy",
"name": "Mitchell Admin",
"username": "admin",
"partner_display_name": "YourCompany, Mitchell Admin",
"company_id": 1,
"partner_id": 3,
"web.base.url": "http://127.0.0.1:8080",
"active_ids_limit": 20000,
"profile_session": null,
"profile_collectors": null,
"profile_params": null,
"max_file_upload_size": 134217728,
"home_action_id": false,
"cache_hashes": {
"translations": "5ad06e487c185f5f4a80c72120c954fa70a279a8",
"load_menus": "db05f3845859cfac0bc400bd13512ceacf41cd75e2478019bc1db62a266ef1cc",
"qweb": "b3981763272f1f1b9af47113922db3b93606d3681ae38162b15d73250e66e92c",
"assets_discuss_public": "e63e0ca54f65545b732a321ae202434cd70a902b81666851d74d86082bd48e1c"
},
"currencies": {},
"user_companies": {
"current_company": 1,
"allowed_companies": {
"1": {
"id": 1,
"name": "YourCompany",
"sequence": 0
}
}
},
"show_effect": "True",
"display_switch_company_menu": false,
"user_id": [
2
],
"web_tours": [],
"tour_disable": true,
"notification_type": "email",
"session_id": "333fb09a92b5f0ad333ffae2059cea44091ad7e0"
}
}
最后将session_id放到 上面接口即可
ODOO路由里面的auth="user" 的使用的更多相关文章
- vue 路由里面的 hash 和 history
对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...
- procps包里面的sysctl命令
procps包里面的sysctl命令 --http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_med ...
- 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute
先贴文章链接 正文 ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. (注:文章是18年2月份的, ...
- 讲一下Asp.net core MVC2.1 里面的 ApiControllerAttribute (转载)
ASP.NET Core MVC 2.1 特意为构建 HTTP API 提供了一些小特性,今天主角就是 ApiControllerAttribute. (注:文章是18年2月份的,所以文章提到了cor ...
- openstack里面的Provider network 和 Tenant network 的区别
openstack里面的Provider network 和 Tenant network 的区别 openstack里面的网络相对复杂.经常有人对几个网络概念搞混淆,这里基本说明下 Openstac ...
- Activity往另外一个Activity传值,Fragment获取另外一个Activity里面的值。
在oneActivity中实现跳转到MainActivity //intent 用来跳转另外一个MainActivity,bundle传值到MainActivity Intent Ma ...
- Java基本概念(2)J2EE里面的2是什么意思
J2EE里面的2是什么意思 J2SE,J2SE,J2ME中2的含义要追溯要1998年.1998年Java 1.2版本发布,1999年发布Java 1.2的标准版,企业版,微型版三个版本,为了区分这三个 ...
- 在wex5平台grid里面的gridselect下拉不能显示汉字问题
当grid里面有gridSelect组件的时候,gridSelect里面的bind-ref是对应的数据库存入字段(int类型),bind-labelRef是对应的计算字段(视图里面的),而option ...
- dede文章调用时过滤调 body里面的style属性和值
dede 发布文章的时候会在里面的标签中添加一些style 属性,现在改网站想去掉这些属性和里面的值,因为文章太多所以就用下面的方法 \include\arc.listview.class.php 在 ...
- 提取数据库字段里面的值,并改变+图片懒加载,jquery延迟加载
要求:手机端打开某个页面的详细信息,因为网速或者别的原因,响应太慢,因为图片大的原因,希望先进来,图片在网页运行的情况再慢慢加载(jquer延迟加载) http://www.w3cways.com/1 ...
随机推荐
- 【论文随笔】多行为序列Transformer推荐(Multi-Behavior Sequential Transformer Recommender)
前言 今天读的论文为一篇于2022年7月发表在第45届国际计算机学会信息检索会议(SIGIR '22)的论文,文章主要为推荐系统领域提供了一个新的视角,特别是在处理用户多行为序列数据方面,提出了一种有 ...
- 响应式编程之Reactive Streams介绍
Reactive Streams 是一种用于异步流处理的标准化规范,旨在解决传统异步编程中的背压管理.资源消耗及响应速度等问题. 一.核心概念 基本模型 发布者(Publisher):负责 ...
- gorm插入报错Error 1292 (22007): Incorrect datetime value: ‘0000-00-00‘ for column ‘xxx‘ at row 1
在MySQL中,'0000-00-00 00:00:00'不是一个合法的DATETIME值.从MySQL 5.7.5开始,默认情况下不允许插入零日期或零时间值到DATETIME或 TIMESTAMP列 ...
- Jupyter Notebook的所有文件ipynb保存下来
前言 如果你想要保存整个 Jupyter Notebook 工作目录,包括所有笔记本和其他相关文件,最直接的方法是将整个文件夹压缩为一个 ZIP 或 TAR 文件. 下载单个文件 压缩文件夹下载 在 ...
- ubuntu apt 安装报错:Media change: please insert the disc labeled 'Ubuntu 20.04.5 LTS Focal Fossa - Release amd64 (20220831)' in the drive '/cdrom/' and press [Enter]
前言 如果你在 Ubuntu 上使用 apt 安装软件包时遇到 "Media change: please insert the disc labeled ..." 的错误消息,这 ...
- mysql 导出数据的命令
博客地址:https://www.cnblogs.com/zylyehuo/ # 1.数据库备份与恢复 # mysqldump命令用于备份数据库数据 [root@localhost ~]# mysql ...
- 软件测试_Fiddler抓包工具
多数资料摘抄至 https://www.cnblogs.com/miantest/p/7289694.html 一.在 macOS 下如何安装 (https://www.telerik.com/fid ...
- 《视觉SLAM十四讲》第13讲 设计SLAM系统 回环检测线程的实现
<视觉SLAM十四讲>第13讲 设计SLAM系统 回环检测线程的实现 这个学期看完了高翔老师的<视觉SLAM十四讲>,学到了很多,首先是对计算机视觉的基本知识有了一个更加全面系 ...
- apisix~hmac-auth插件的使用
hmac-auth插件需要和 Consumer 一起使用,API 的使用者必须将密匙添加到请求头中以验证其请求,下面介绍它的主要用法 参数 algorithm 算法 默认hmac-sha256 [&q ...
- Javascript 对象(object)合并
转
转载了一篇介绍的比较直观的博文.