1

Rails 5 및 Devise에서 Ajax 인증을 사용하고 있습니다. 테이블 사용자에게는 열 차단이 있고 사용자가 차단되면 로그 아웃됩니다. 사용자가 차단InvalidAuthenticityToken, Ajax, Rails 5 with Device

def create 
    if warden.authenticate(:scope => resource_name) 
     if current_user.blocked 
      sign_out(@user) 
      return render json: {blocked: true} 
     else 
      return render json:{success: true} 
     end 
    else 
     return render json: {error: true} 
    end 
end 

경우 그는 서버의 응답을 인증하려고 {blocked: true}입니다 :

이것은 대체
$(document).ajaxSend(function(e, xhr, options) { 
    var token = $("meta[name='csrf-token']").attr("content"); 
    xhr.setRequestHeader("X-CSRF-Token", token); 
}); 

이 SessionsController의 방법을 만들 : 나는 세계적으로 아약스에 대한 헤더를 설정했습니다. 그가 다시 응답을 시도하는 경우, 페이지를 새로 고침하지 않으면 오류가 발생합니다 : 사용자의

ActionController :: InvalidAuthenticityToken :: SessionsController 번호는 (라인 # 195의 주위에) ActionController :: InvalidAuthenticityToken 추출 소스를 만들 :

헤더에서 사용자가 로그인을 시도 할 때마다 토큰이 전송되는 것을 볼 수 있습니다. 처음 로그인 할 때 토큰이 변경 되었기 때문에 문제가 될 수 있습니다.하지만 Ajax와 관련된 요청이므로 새 토큰을 얻을 수는 있지만이를 수정하는 방법을 모르겠습니다.

답변

1

ajax 완료시 ajaxComplete 이벤트를 사용하고 로그인 요청 완료 후 meta [name = 'csrf-token'] 콘텐츠를 설정할 수 있습니다.