2017-01-04 10 views
0

I以下のモデルがあります:書き込みデータ(Odoo 9.0)

class LibraryBook(models.Model): 
    _name = 'library.book' 
    name = fields.Char('Title', required=True) 
    date_release = fields.Date("Release Date") 
    author_ids = fields.Many2many("res.partner", string="Authors") 

私はOdooに新たなんだとPOSTからの私のモデルにデータを保存する方法の基本を理解しようとします

[...] 
@http.route('/test', type='http', auth='public',methods=['POST'], website=True, csrf=False) 
def test(self, **kwargs): 
    record = request.env['library.book'].sudo() 
    record.create(kwargs) 
012:以下

curl -i -X POST --data "name=Odoo%20-%20Much%20Mystery,%20Wow&author_id=Doge" http://0.0.0.0:8069/test 

私はそうのようfalseに私のコントローラでcsrfパラメータを設定することにより、これを行う方法を見つけたような要求

csrf=falseを設定しないようにする方法があるのか​​どうかは、私が読んだところでは一般的には悪い考えです。また、私はそれを取り除くために何が必要でしょう.sudo()csrf=falseを設定しないと、400 BAD REQUESTInvalid CSRF tokenとなります。 sudo()を削除すると、500 INTERNAL SERVER ERRORになります。 Odoo開発クックブックでは、コード例Iと仮定すると

のメソッドをモデル化するためにすべての私たちの呼び出し)我々は(sudoのに持っている理由、一例ではauth='none'

で、ユーザーの欠如でもあると言いますAPIからのPOSTリクエストを期待していますが、これをユーザーと関連付けることができるので、sudo()は必要ありませんか?

私は非常にこの上の任意の説明をいただきありがとうございます。

UPDATE

だから、僕はthis(ライン817)が見つかりました:フォームはあなたが外部の第三者(例えばREST APIエンドポイント、支払いゲートウェイのコールバック)によってアクセスされている場合


  • によってCSRF
    の保護を無効にし(必要に応じて独自の保護を実装する)、csrf=Falseパラメータをに渡す必要がありますデコレータ。私はsudoについて、一つだけ質問を開いたままに推測

+0

はイライラすることができます。 jsonrpcまたはxmlrpcを考慮しましたか? –

答えて

1

SUDO()

は、提供されたユーザーセットを使って、新しい環境を作成し、何も提供されていない場合は(安全なコンテキストでアクセス権/ルールをバイパスするために)管理者を使用して、レコードセットのコピーを返します。

Odooでは、公開ユーザーがレコードを作成、更新、削除することを許可していません。 公開ユーザーからレコードを作成する場合は、sudo()を使用してレコードを作成する必要があります。

私は、これはあなたを助けることを願ってい

request.env['library.book'].sudo().create(vals) 

管理者としてレコードオブジェクトを作成します。詳細については、 次のリンクに移動することができます。これらの種類の問題を通る作動 https://www.odoo.com/documentation/9.0/reference/orm.html

おかげ

+0

これは、データが正当なソースからのものであり、悪意のあるユーザーからのものではないことをどのようにして保証しますか?誰かがPOSTにSQLコマンドを挿入できませんでしたか? – user2757902

関連する問題