2013-05-21 3 views
1

내 클라이언트 앱이 JSON 인코딩 POST를 레일스 서버로 보냈지 만 서버가 406 오류를 표시하고 json에 응답하지 않습니다.완료 됨 406 773ms에서 허용되지 않음

UsersController

# POST /users 
# POST /users.json 
def create 
    @user = User.new(params[:user]) 

    respond_to do |format| 
    if @user.save 
     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     format.json { render json: @user, status: :created, location: @user } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
    end 
end 

레일 만들 콘솔 :

Started POST "/users.json" for 127.0.0.1 at 2013-05-21 16:38:47 +0100 
Processing by Devise::RegistrationsController#create as JSON 
    Parameters: {"user"=>{"name"=>"", "available"=>"true", "email"=>"", "sex"=>"male", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}} 
WARNING: Can't verify CSRF token authenticity 
    (0.2ms) begin transaction 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '' LIMIT 1 
    (0.2ms) rollback transaction 
Completed 406 Not Acceptable in 773ms (ActiveRecord: 6.1ms) 

이 사람이 나를 도울 수 있습니까?

+0

내가 제안하는 한 가지는 CSRF 토큰 신뢰성을 해제하는 것입니다. 이렇게하려면 json을 렌더링하고'skip_before_filter : verify_authenticity_token'을 추가하는 컨트롤러로 이동하십시오. 다른 필터와 마찬가지로 조정하십시오. 물론 JSON을 Rails로 보내는 앱에는 CSRF 토큰을 생성 할 수 없다고 가정합니다. – jason328

+1

[교차 사이트 요청 위조 보호] (https://en.wikipedia.org/wiki/Cross-site_request_forgery)를 끄는 것이 나에게 좋은 생각 같지는 않습니다. –

답변

0

컨트롤러 상단에 respond_to :json, only: [:create]을 추가해야합니다. HTML을 사용하는 작업에 respond_to :html을 추가해야 할 수 있습니다.

2

나중에 누구나 볼 수 있도록 잠시 후 대답하려고합니다. 심지어

respond_to do |format| 
    format.json { render json: @user, status: :created, location: @user } 
end 

로 명시 적으로 호출 할 때 : 만 (귀하의 예제에서이 같은) 내 컨트롤러의 하단에있는 포맷 옵션으로 JSON을 했어 경우에도 이상 내가 이상이 문제로 실행했습니다 $.getJSON 내 요청에 JSON 데이터 형식으로 호출합니다.

내 트릭은 내 페이지 이름에서 .json으로 호출하는 것이 었습니다.

$.getJSON('controllername-your-calling.json?', function(json){ 
     //do your stuff... 
}); 

아마도 도움이 될 것입니다.

관련 문제