В коде PHP можно сделать jsonrpc вызов /web/session/authenticate
и получить session_id в ответ. Вы можете передать session_id как хэш вашего URL-адреса при перенаправлении. Создайте страницу в odoo, которая использует javascript для чтения хэша и напишет файл cookie "session_id=733a54f4663629ffb89d3895f357f6b1715e8666"
(очевидно, пример) вашему браузеру на странице вашего сайта. На этом этапе вы сможете перемещаться в оду, как пользователь, который вы аутентифицировали, как в вашем php-коде.
from requests import Request,Session
import json
base_url = "127.0.0.1:8069"
url = "%s/web/session/authenticate" % base_url
db = <db_name>
user = <login>
passwd = <password>
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)
r_data = json.loads(resp.text)
session_id = r_data['result']['session_id']
В этом примере используется ванильный локон. Я знаю, что это не php, но я могу обновить это сообщение позже для php. Однако принцип все же остается. Просто преобразуйте этот curl в php.
Как вы проходите этот сеанс с перенаправлением, зависит от вас. Есть проблемы с безопасностью, о которых вам нужно будет опасаться. Поэтому будьте осторожны, чтобы не пройти session_id небезопасно, или кто-то может обнюхать его и стать зарегистрированным пользователем.
Это пример (непроверенный), вам нужно будет создать строку, закодированную json, подобную приведенному выше примеру скручивания. Надеюсь это поможет.
$data = <your_json_data>
$data_string = json_encode($data);
$ch = curl_init('http://127.0.0.1:8069/web/session/authenticate');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);
$result = curl_exec($ch);
После того, как ваш session_id
вы будете перенаправлены на ваш odoo сервера на маршрут, который обрабатывается контроллером в вашем аддоне.
Контроллер
imports ...
class MyAddon(http.Controller):
@http.route('/path/for/controller', type='http', auth='public', website=True)
def ext_login_redirect(self, **kw):
return http.request.render('myaddon.template',{})
Важной частью является то, что хэш в URL содержит session_id вы получили в РНР.
Шаблон your_template.xml
<openerp>
<data>
<template id="template" name="Redirect Template" page="True">
document.cookie = "session_id=" + window.location.hash;
window.location = "127.0.0.1:8069/web";
</template>
</data>
</openerp>
Привет Филип, Спасибо за ваши входы, но я был на самом деле смотрит на одну из перечисленных выше возможностей, а не посадка их на странице сайта Odoo. И таким образом, я предполагаю, что метод python и перенаправление от этого будут способом обойти это. Но я все еще не понимаю, где разместить это в точности, добавьте его как новый метод в openerp/service/common.py или в одну из моделей в Odoo. Не могли бы вы указать указатели в указанном выше направлении, если вы знакомы с Оду? –
Как только у вас будет сеанс, я бы переадресовал маршрут, определенный контроллером в вашем добавлении. Откройте страницу, на которой просто есть Javascript, который может читать ваш хэш и регистрировать cookie. Как только cookie зарегистрирован, вы можете переадресовать на любую страницу окуни, которую вы хотите. Все это должно произойти так быстро, что пользователь не узнает, что это произошло. –
Я могу привести следующий пример завтра. О том, как реализовать контроллер и Javascript. –