Creo que leer el valor CSRF de DOM no es una buena solución, es solo una solución.
Aquí hay un documento del sitio web oficial angularJS http://docs.angularjs.org/api/ng.$http :
Dado que solo JavaScript que se ejecuta en su dominio podría leer la cookie, su servidor puede estar seguro de que el XHR provino de JavaScript que se ejecuta en su dominio.
Para aprovechar esto (Protección CSRF), su servidor necesita establecer un token en una cookie de sesión legible de JavaScript llamada XSRF-TOKEN en la primera solicitud HTTP GET. En solicitudes posteriores que no sean GET, el servidor puede verificar que la cookie coincida con el encabezado HTTP X-XSRF-TOKEN
Aquí está mi solución basada en esas instrucciones:
Primero, configure la cookie:
# app/controllers/application_controller.rb
# Turn on request forgery protection
protect_from_forgery
after_action :set_csrf_cookie
def set_csrf_cookie
cookies['XSRF-TOKEN'] = form_authenticity_token if protect_against_forgery?
end
Luego, debemos verificar el token en cada solicitud que no sea GET.
Como Rails ya ha construido con un método similar, simplemente podemos anularlo para agregar nuestra lógica:
# app/controllers/application_controller.rb
protected
# In Rails 4.2 and above
def verified_request?
super || valid_authenticity_token?(session, request.headers['X-XSRF-TOKEN'])
end
# In Rails 4.1 and below
def verified_request?
super || form_authenticity_token == request.headers['X-XSRF-TOKEN']
end