구리의 창고

Rails3 - ajax 요청으로 session을 사용 할 수 없는 경우 본문

Ruby

Rails3 - ajax 요청으로 session을 사용 할 수 없는 경우

구리z 2012. 6. 10. 11:10

Rails 3에서는 자체에서 CSRF protection을 해준다고한다.


아파치 로그를 살펴보면 WARNING: Can't verify CSRF token authenticity 와 같이 떠있다.


그래서 session이 제대로 저장되지 않은 것처럼 보이는데 두 가지 해결 방법이 있다.


CSRF protection을 꺼버리던가(나는 그냥 이게 편하던데) ajax 요청시 헤더에 csrf token 값을 넣어서 보내주는 것이다.



보통 rails가 만들어주는 기본 레이아웃에 <%= csrf_meta_tag %> 라는게 존재하는데


<meta content="IjtRujezbmbM+aTMl2xUDmPOnDOTYSHZRwE+0TE8pvs=" name="csrf-token" />


이와 같이 자동으로 token을 만들어준다.


common.js와 같이 공통으로 사용하는 자바스크립트에서 ajaxSend를 아래와 같이 바인딩해주던지,


$.ajaxSetup({
  beforeSend
: function(xhr) {
    xhr
.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'));
 
}
});


ajax 요청시 header에다가 X-CSRF-Token에 위 meta content 값을 같이 넘겨주면된다.


다른 방법으로 제시했던 CSRF protection을 끄는 법은


app/controller/application_controller.rb 에서 protect_from_forgery를 주석처리해주면된다.

Comments