10
votes

La session Rails est vide lors de l'utilisation de HTTP.

J'ai une situation, où une liaison particulière entraîne une session vide Hash. Ce n'est pas bon car j'ai besoin de trouver un modèle en utilisant la session_id.

Le lien qui cause des problèmes est: xxx

et le code qui trouve le modèle de L'ID de session (qui s'appelle à l'aide d'un fichier avant_filter): xxx

en mode de débogueur, session == {}

Si je modifie le lien_to pour être un http 'Get' au lieu de "mettre", la session est envoyée. Toutefois, cette demande n'est pas appropriée pour un "get" car il modifie les données.

Pourquoi "deviendrait" inclure la session, mais "ne" pas "


2 commentaires

Je pense que vous devez donner plus d'informations supplémentaires. Seule cette méthode link_to n'est pas suffisante.


J'ai ajouté les informations sur GET VS Mettez. Quelles autres informations aideraient?


3 Réponses :


10
votes

OK, trouva-le. Étant donné que le lien est un puits HTTP-MET, les rails n'incluent pas automatiquement le jeton d'authenticité, car il le fait avec un http-get. Donc, en passant le jeton d'authenticité en tant que param, rails reconnaît la session.

<div id="marker_images">
  <% @marker_image_urls.each do |image_url| %>
    <%= link_to( image_tag(image_url), 
                 location_type_path(@location_type.id, 
                                    :location_type => {:preset_marker_url => image_url},
                                    :authenticity_token => form_authenticity_token), 
                 :method => :put,
                 :remote => true ) %>
  <% end %>
</div>


3 commentaires

Eu le même problème. Le fichier rails.js (jQuery) n'a pas inclus le jeton dans chaque cas qu'il devrait, ce qui a provoqué des problèmes. gist.github.com/865699


Devons-nous passer l'authenticité_Token en plus du jeton X-CSRF?


Le lien vers le site Kolodvor est cassé.



1
votes

Cela arrive si vous avez oublié d'ajouter <% = csrf_meta_tags%> à votre présentation. Ajoutez-le comme xxx


0 commentaires

1
votes

Ceci est causé par la protection CSRF dans les rails. Voir Cette notification de correctif de sécurité

Pour corriger définitivement ce problème, suivez les instructions sur le lien ci-dessus. Les dernières versions de rails.js ont été correctées pour ajouter le paramètre authenticity_token à toutes les demandes Ajax générées par des rails.

Si vous mettez à niveau une version rapide des rails, vous devrez peut-être inclure csrf_meta_tag dans votre présentation comme suggéré par Vikrant Chaudhary.


0 commentaires