2016-10-09 81 views
0

我有odoo 8控制器,它返回只能記錄用戶訪問的某些數據。網站位於不同的服務器上,然後odoo本身。我如何從我的頁面請求身份驗證(如在不同服務器上提到的)?Odoo 8控制器身份驗證跨站點

p.s.在我的開發環境中,它一切正常,因爲我從localhost/index.html調用請求到localhost/getData(通過反向代理到localhost:8069/getData for cors)。但是,當我把它放在我們的真實服務器上的一些缺失會話錯誤響應

謝謝

回答

1

你需要從遠程服務器進行身份驗證並獲得SESSION_ID。一旦你有這個,把它作爲一個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) 
+0

phillipstack我假設我可以從客戶端做同樣的請求? (客戶端是瀏覽器)?看起來不錯,我今晚會測試一下,並且更新你的結果。謝謝 – detroit

+0

是的,我看不出有什麼理由不能以任何支持使用cookie屬性傳遞請求的語言發出此請求。 –

+0

我仍然有一些Cors問題,但我不能看到這個失敗,因爲它更多的是一個odoo語法問題:)我會修復我的Cors,同時我將它標記爲回答。你救了我的一天phillipstack! – detroit