2016-09-21 13 views
1

私は外部PHPシステムからOdooにリダイレクトする必要があり、ユーザーもログインする必要があります。私はこれを成し遂げるために、次の2つの方法を考えた:外部PHPシステムからOdooにログイン

  1. 特定のコントローラを呼び出し、明白な理由のための安全なオプションではありませんURL、alongiwth資格情報を渡すPHP側からURLのリダイレクト

  2. phpからxmlrpcを使用し、必要な引数をphpから渡して、引数を使用してサインインしてから、ここでメソッドをリダイレクトします。 odoo内のリダイレクトについては、コントローラと通常の関数が異なる方法で動作するため、このメソッドが機能するかどうかをさらに確認する必要があります。

どの方法がより良いかを提案してください。これを行うには他にも簡単な方法がありますか。そして、openerp/service/common.pyに新しいメソッドを追加し、そのメソッドを呼び出すことは意味がありますか?そこからログインしたodooページにリダイレクトすることは可能でしょうか?

上記の情報を参考にして、これがOdooで頻繁に発生する他の外部システム統合クエリに役立つことを願っています。 PHPコードで

おかげに関して、 Yaseenシャリーフ

答えて

2

あなたは/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> 
+0

こんにちはフィリップ、あなたの入力のための おかげで、私は実際にはかなりOdooのウェブサイトのページ上に着陸よりも、上記の可能性のうちの1つを見ていました。そしてその方法で、私はPythonのメソッドとそれからのリダイレクトは、それについて行く方法だろうと思います。しかし、私はこれを正確に配置する場所はまだ不明ですが、openerp/service/common.pyの新しいメソッドとして、またはOdoo内のいずれかのモデルに追加してください。あなたはOdooをよく知っていれば、上記の方向で指針を提供してください。 –

+0

セッションを終了したら、追加したコントローラの定義したルートにリダイレクトします。あなたのハッシュを読んでクッキーを登録できるJavascriptがあるページを開きます。クッキーが登録されると、必要なodooページにリダイレクトできます。このすべては、ユーザーがそれが起こったことさえ知らないので、すぐに起こるはずです。 –

+0

私は明日のさらなる例を提供することができます。コントローラとJavascriptの実装方法について。 –

関連する問題