2011-11-28 2 views
1

iPhone 응용 프로그램에서 json을 통해 레일 백엔드에 사용자 acount를 만들려고합니다. 다음은 현재 서버에 게시되는 내용이다 :iOS에서 Rails 3.1로 JSON 게시 (Stringify_keys 오류)

Parameters: {"utf8"=>"✓", "authenticity_token"=>"H2iYdzdfokQs91AAozb+taMTdV2y5xLRaCni5XKQN4w=", "patient"=>{"email"=>"test", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Create Patient"} 

을 내가 다른 곳 stringify_keys를 읽은 내용에서 그 의미 : 브라우저에서 바로 게시함으로써

Started POST "/patients" for 127.0.0.1 at 2011-11-27 20:52:29 -0800 
    Processing by PatientsController#create as HTML 
    Parameters: {"patient"=>"{\"password\":\"password\",\"password_confirmation\":\"password\",\"email\":\"testagain\"}"} 
WARNING: Can't verify CSRF token authenticity 
Completed 500 Internal Server Error in 1ms 

NoMethodError (undefined method `stringify_keys' for #<String:0x00000104a354f8>): 
    app/controllers/patients_controller.rb:43:in `new' 
    app/controllers/patients_controller.rb:43:in `create' 

이 제출하는 PARAMATERS은 나는 새 사용자를 만들려면이 코드를 사용하고 있기 때문에 조치는 (내가 거의 재구성 생각하는) 해시를 기대 : 나는 또한 생각

@patient = Patient.new(params[:patient]) 

그 진위 토큰 JSON 형식을 사용하여 게시하는 경우 중요하지 않습니다 ... 중요합니까?

전체 질문 : 아이폰 앱에서 레일 백엔드에 게시하는 것이 올바른 방법입니까? 매개 변수 해시를 다시 만드시겠습니까? 올바른 방향으로 조금 움직여 주시면 감사하겠습니다.

NSDictionary *json = [self createSignUpDictionary]; 
NSURL *url = [NSURL URLWithString:@"http://localhost:3000/patients"]; 
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
[request addRequestHeader:@"Content-Type" value:@"application/json"]; 
[request addRequestHeader:@"Accepts" value:@"application/json"]; 
[request setPostValue:[json JSONString] forKey:@"patient"]; 
[request startAsynchronous]; 

답변

1

당신은 가능성이 가장 높은 액션에 대한 인증 토큰 검증을 비활성화 할 수 있습니다 완성도를 위해서

여기 내 iOS 앱에서 게시하려면 사용하고 코드 조각입니다.

컨트롤러에 다음 줄을 넣으면 모든 것이 작동합니다.

protect_from_forgery :except => :index 

그러나 그렇다면 # 작성 기능에 사용자 정의 보호 기능이 있는지 확인하십시오. 당신은 더 많은 정보를 위해 이것을 읽을 수 있습니다 : http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html

+2

이것은 내 문제를 해결하지 못했지만, 해결해야 할 또 다른 문제였습니다. 그래서 그것을 표시 할 것입니다. 이 문제는 JSON 헤더를 설정 했음에도 불구하고 HTML로 처리 중임을 알리는 것으로이 문제를 해결했습니다. 게시물 요청에 ".json"을 첨부하면이 문제가 해결되었습니다. – Msencenb

+0

이전 답변이 아니기 때문에 별도로 답변을 게시하고 동의합니다. 사실 맞아. –

관련 문제