9

Niedawno przeszedłem do zamknięcia Google dla nowego projektu. Mam problem z dodaniem tokena uwierzytelniania do nagłówków w wywołaniu ajax. Jak sobie z tym poradzić?Jak dodać token uwierzytelniania?

Moja Ajax fragment (używając klasy goog.net.XhrIo):

var initialHTMLContent = superField[i].getCleanContents(); 

var data = goog.Uri.QueryData.createFromMap(new goog.structs.Map({ 
    body: initialHTMLContent 
})); 

goog.net.XhrIo.send('/blogs/create', function(e) { 
    var xhr = /** @type {goog.net.XhrIo} */ (e.target); 
    alert(xhr.getResponseXml()); 
}, 'POST', data.toString(), { 
    'Accept' : 'text/xml' 
      }); 

Korzystanie z szyn w backend.

UPDATE:

Log:

Processing BlogsController#create (for 127.0.0.1 at 2010-06-29 20:18:46) [PUT] 
    Parameters: {"authenticity_token"=>""} 

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken): 


Rendered rescues/_trace (272.4ms) 
Rendered rescues/_request_and_response (1.2ms) 
Rendering rescues/layout (unprocessable_entity) 

Odpowiedz

15

Gdzieś w widoku szyn (.html.erb file) można ustawić zmienną js tak:

window._token = '<%= form_authenticity_token %>'; 

I następnie dodaj to do swojego połączenia:

goog.net.XhrIo.send('/blogs/create?authenticity_token=' + window._token, function(e) { 
    var xhr = /** @type {goog.net.XhrIo} */ (e.target); 
    alert(xhr.getResponseXml()); 
}, 'POST', data.toString(), { 
    'Accept' : 'text/xml' 
      }); 
+0

dostaję '# '. Może nie bierze on tokena auth? Zaktualizowałem swoje pytanie w dzienniku. –

+0

Zaktualizowałem odpowiedź odpowiednio. Wydaje się, że masz to połączenie w zwykłym pliku javascript. Potrzebujesz wygenerować token na serwerze, więc musisz to zrobić w widoku. –

+0

Zaktualizowałem moje pytanie. Nie uwzględnia to tokena uwierzytelnienia. –

2

Szyny teraz automatycznie dodaje tag meta dla niego, więc wtedy na swojej stronie javascript można użyć:

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