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를 주석처리해주면된다.