あなたは/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をどのように受け渡すかはあなた次第です。あなたが慎重にする必要があるセキュリティ上の懸念があります。したがって、セッション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のウェブサイトのページ上に着陸よりも、上記の可能性のうちの1つを見ていました。そしてその方法で、私はPythonのメソッドとそれからのリダイレクトは、それについて行く方法だろうと思います。しかし、私はこれを正確に配置する場所はまだ不明ですが、openerp/service/common.pyの新しいメソッドとして、またはOdoo内のいずれかのモデルに追加してください。あなたはOdooをよく知っていれば、上記の方向で指針を提供してください。 –
セッションを終了したら、追加したコントローラの定義したルートにリダイレクトします。あなたのハッシュを読んでクッキーを登録できるJavascriptがあるページを開きます。クッキーが登録されると、必要なodooページにリダイレクトできます。このすべては、ユーザーがそれが起こったことさえ知らないので、すぐに起こるはずです。 –
私は明日のさらなる例を提供することができます。コントローラとJavascriptの実装方法について。 –