당신은 /web/session/authenticate
에 JSONRPC 통화를하고 응답에 SESSION_ID를받을 수 있습니다. 리디렉션에서 url의 해시로 session_id를 전달할 수 있습니다. odoo에서 javascript를 사용하여 해시를 읽고 oudoo 페이지의 브라우저에 쿠키 "session_id=733a54f4663629ffb89d3895f357f6b1715e8666"
(분명히 예)을 쓰는 페이지를 만듭니다. 이 시점에서 PHP 코드 에서처럼 인증 한 사용자로 odoo를 탐색 할 수 있어야합니다.
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로 업데이트 할 수 있습니다. 그러나 여전히 그 원칙이 있습니다. 이 컬을 PHP로 변환하십시오.
리디렉션과 함께이 session_id를 전달하는 방법은 귀하에게 달려 있습니다. 당신이주의해야 할 보안 문제가 있습니다. 따라서 session_id를 안전하지 않게 전달하지 않도록주의하십시오. 그렇지 않으면 누군가가 스니핑하고 로그인 한 사용자가 될 수 있습니다.
이 예제는 (테스트되지 않은) 예제입니다. 위에 제공된 curl 예제와 비슷한 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에 해시 당신이 당신의 PHP에서 얻은 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 웹 사이트 페이지를 방문보다 위의 가능성 중 하나를 찾고 있었어요. 그리고 그런 식으로, 나는 파이썬 메서드와 리다이렉션이 그것에 대해가는 길일 것이라고 생각합니다. 하지만이 위치를 정확히 어디에 두어야할지 모르겠다. openerp/service/common.py 또는 Odoo의 모델 중 하나에 새 메소드로 추가하십시오. Odoo에 익숙하다면 위의 지시 사항을 알려주십시오. –
일단 세션이 생기면 애드온의 컨트롤러가 정의한 경로로 리디렉션됩니다. 해시를 읽고 쿠키를 등록 할 수있는 Javascript가있는 페이지를 엽니 다. 쿠키가 등록되면 원하는 odoo 페이지로 리디렉션 할 수 있습니다. 이 모든 일이 너무 빨리 일어나서 사용자는 그것이 일어난 일조차 모르게됩니다. –
내일 예를 더 제공 할 수 있습니다. 컨트롤러와 Javascript를 구현하는 방법. –