2017-01-04 4 views
0

나는 다음과 같은 모델이 있습니다데이터 쓰기 (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에서 내 모델에 데이터를 저장하는 방법의 기초를 이해하려고 노력을 같은 요청하는 나는 방법과 같이 false에 내 컨트롤러에 csrf 매개 변수를 설정하여이 일을 발견

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

다음

[...] 
@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) 

csrf=false을 설정하는 것을 피할 수있는 방법이 있는지 궁금합니다. 일반적으로 이렇게하는 것이 좋지 않습니다. 또한, 그걸 제거하려면 무엇이 필요합니까 .sudo()? csrf=false을 설정하지 않으면 Invalid CSRF token으로 400 BAD REQUEST이됩니다. sudo()을 삭제하면 500 INTERNAL SERVER ERROR이됩니다. 우리가) (sudo는로 I 가정 예제 코드

의 방법을 모델링하는 우리의 모든 통화를 왜 요리 책Odoo 개발에서는 사용자의 auth='none'

부족 하나의 예를 말한다는 것입니다 API의 POST 요청을 기대할 수 있습니다. 사용자와 연관시킬 수 있나요? sudo()?

나는 이것에 대한 설명을 매우 감사하게 생각합니다. 폼이 외부 타사하여 (예를 들어, REST API를 엔드 포인트, 지불 게이트웨이 콜백)를 액세스 할 경우

  • : UPDATE

    그래서 난 그냥 this (라인 817) 발견 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