I have this request that i send in python.
import requests
headers = {
'Content-Type': 'application/json',
'api_key': '1233445677676' # api_key is fake
}
data = '{"params": {"name":"Opportunity using auth_key","type":"opportunity"}}'
response = requests.post('https://ex-test.odoo.com/leads', headers=headers, data=data)
print(response.json())
This is odoo version 15 controller code
import json
from werkzeug.exceptions import BadRequest
import logging
from odoo import http
from odoo import models
from odoo.http import request
_logger = logging.getLogger(__name__)
class IrHttp(models.AbstractModel):
_inherit = "ir.http"
@classmethod
def _auth_method_api_key(cls):
api_key = request.httprequest.headers.get("api_key")
if not api_key:
raise BadRequest("Authorization header with API key missing")
user_id = request.env["res.users.apikeys"]._check_credentials(
scope="rpc", key=api_key
)
if not user_id:
raise BadRequest("API key invalid")
request.uid = user_id
class CRMc(http.Controller):
@http.route('/leads', type='json', auth="api_key", methods=['POST'])
def api_authenticate(self, **kw):
if request.uid:
rec_id = request.env['crm.lead'].create({
'create_uid': request.uid,
'type': http.request.params.get('type'),
'name': http.request.params.get('name'),
})
return json.dumps(rec_id.id)
I have sent request using postman and the python code i provided.But when i send request i do not get header on the server side and receive error like Authorization header with API key missing.
I am not getting my api_key on the server side.
I have tried in local environment. In local, it works fine. But when i have tried in odoo.sh it is not receiving header.
If anyone has any idea on this please help.