Межсайтовая аутентификация контроллера Odoo 8

#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. вы можете, но у меня это не работает 🙂 Перепробовал все, что знал, в итоге я создал обратный прокси, как указано в описании