2013-08-14 2 views
0

전선에서 백본을 사용하고 백엔드에서는 루비 온 레일즈를 사용합니다. 내 인증을 위해 보석을 고안했습니다. 며칠 전 프론트 엔드 팀이 업무를 마쳤으며 이제는이 모든 것을 묶어야합니다. 그래서 나는 Started POST "https://stackoverflow.com/users/sign_in.json" 요청으로 json trough 백본 (표준 방식)으로 데이터를 보내려고하는데 protect_from_forgery except: :create을 내 사용자 지정 세션 컨트롤러에 넣더라도 오류 Completed 401 Unauthorized in 180ms가 표시됩니다. 내 <%= csrf_meta_tags %> 그래서 내가 웹에서 발견이 방법을 사용할 수 있습니다public/index.html 파일에서 <% = csrf_meta_tags %>를 생성하는 방법

class UserSessions::SessionsController < Devise::SessionsController 

    protect_from_forgery except: :create 
    ...... 
end 

방법이를 생략하거나, 내가 생성해야합니다 여기서 :이처럼

App.csrfToken = $("meta[name='csrf-token']").attr('content'); 

Backbone.sync = (function(original) { 
    return function(method, model, options) { 
    options.beforeSend = function(xhr) { 
     xhr.setRequestHeader('X-CSRF-Token', App.csrfToken); 
    }; 
    original(method, model, options); 
    }; 
})(Backbone.sync); 

나는 표준이 다시 이동할 수 없습니다 왜냐하면 frontend가 require.js에 의존하는 백엔드와 별도로 작성 되었기 때문입니다.

+1

csrf_meta_tags를 사용하여 프런트 엔드 어딘가에서 태그를 렌더링해야합니다. 어딘가에 자바 스크립트로 그들에게 갈 수 있습니다. – adriandz

+0

질문은 '이 작업을 수행하는 방법'입니다. 내 공용 폴더에서 .erb 확장자를 사용할 수 없습니다. 그럴 경우, 내 레일/뷰가로드 중입니다 (( –

+0

). 단지이 메시지를 세션 컨트롤러에 추가하여 CSRF 검사를 해제하십시오. skip_before_filter : verify_authenticity_token – adriandz

답변

1

부분적으로 csrf_meta_tags를 넣은 다음 public/index에서 해당 부분을 반환하는 메서드로 ajax 요청을 할 수 있습니다.

+0

이 해결책 일 수 있습니다. –

+0

예 여기서 오른쪽, 나는 index.html의 맨 아래에'window.onload = function() {$. post ('csrf/generate_csrf_meta_tags', null, null, "script");}'를 추가합니다 .. generate_csrf_meta_tags는 js.erb 파일을 렌더링합니다. html.haml 파일에서이 meta_tags가 생성 된 렌더링))) –