#odoo-8
#odoo-8
Вопрос:
У меня есть контроллер odoo 8, который возвращает определенные данные, доступные только зарегистрированным пользователям. Веб-сайт расположен на другом сервере, чем сам odoo. Как я могу запросить аутентификацию со своей страницы (как указано на другом сервере)?
p.s. В моей среде разработки все это работает, поскольку я звоню из localhost/index.html запрос на localhost / getData (через обратный прокси для localhost: 8069 /getData для cors). Но когда я помещаю его на наш реальный сервер, он выдает некоторую ошибку отсутствующего сеанса
Спасибо
Ответ №1:
Вам необходимо пройти аутентификацию на удаленном сервере и получить идентификатор сеанса. Как только вы получите это, передайте его как файл cookie с последующими запросами.
import requests
from requests import Request,Session
import json
b_url = "http://yourodooserver.com"
# or "http://201.100.100.12:8069" (or whatever the ip is)
url = "{}/web/session/authenticate".format(b_url)
db = "<YOURDBNAME>"
user = "<YOURUSERNAME>"
passwd = "<YOURPASSWORD>"
s = Session()
data = {
'jsonrpc':'2.0',
'params': {
'context': {},
'db': db,
'login': user,
'password': passwd,
},
}
headers = {
'Content-type': 'application/json'
}
req = Request('POST',url,data=json.dumps(data),headers=headers)
prepped = req.prepare()
resp = s.send(prepped)
session_id = json.loads(resp.text)['result']['session_id']
# NOW MAKE REQUESTS AND PASS YOUR SESSION ID
res = requests.get(b_url "/your/controller/path",cookies={'session_id':str(session_id)})
print(res.text)
Комментарии:
1. phillipstack я полагаю, что могу выполнить тот же запрос от клиента? (клиент является браузером)? Кажется, здорово, я протестирую сегодня вечером и сообщу вам о результатах. Спасибо
2. Да, я не вижу причин, по которым вы не сможете выполнить этот запрос на любом языке, который поддерживает передачу запроса с атрибутом cookie.
3. у меня все еще есть некоторые проблемы с cors, но я не вижу этого сбоя, поскольку для меня это была скорее проблема с синтаксисом odoo 🙂 Я исправлю свой cors, тем временем я пометил его как ответ. Ты спас мне жизнь, филлипстэк!
4. Отлично, на вашем контроллере, я думаю, вы можете добавить cors=* или что-то в этом роде. Я не на своем компьютере, поэтому я обновлю, если я ошибаюсь.
5. вы можете, но у меня это не работает 🙂 Перепробовал все, что знал, в итоге я создал обратный прокси, как указано в описании