2 votes

Définir un cookie depuis la vue, puis le lire depuis le contrôleur dans Rails

Je voudrais définir la valeur du cookie à partir de la vue Rails en utilisant Javascript, puis utiliser le contrôleur pour lire ce cookie. Est-ce possible avec Rails, et comment dois-je m'y prendre ?

Ma situation : J'ai un champ de saisie (disons, une adresse) que l'utilisateur doit remplir lorsqu'il arrive sur mon site pour la première fois. L'utilisateur se connecte ensuite en utilisant Omniauth. J'aimerais que l'adresse soit conservée jusqu'à ce qu'il se connecte.

Mise à jour : J'ai pu ajouter à document.cookies sur le client. Cependant, cookies["something"] renvoie nil du côté de Rails. Ci-dessous le hash du cookie :

#<ActionDispatch::Cookies::CookieJar:0x007 @secret="f4d518c0b2", @set_cookies={}, @delete_cookies={}, @host="localhost", @secure=false, @closed=false, @cookies={"_myapp_session"=>"BAh7Ck==--776b2fcfcd63d3c84d2b1de5327e277499add6d4", "fbsr_1505068851081"=>"mqZeyvoRC"}, @signed=#<ActionDispatch::Cookies::SignedCookieJar:0x007 _jar=#<ActionDispatch::Cookies::CookieJar:0x007fdf...>, @verifier=#<ActiveSupport::MessageVerifier:0x007fdfa34548d8 @secret="f4d518c0b2e9d8", @digest="SHA1", @serializer=Marshal>>>

11voto

Kaeros Points 1128

Pour définir un cookie en javascript, vous pouvez le faire :

document.cookie="something= test";

Vous pouvez donc ajouter un événement (click, submit, ..) pour obtenir la valeur de l'entrée et créer un cookie comme je l'ai mentionné ci-dessus.

Dans rails, vous pouvez lire la valeur comme ceci :

cookies["something"]

Vous pouvez également spécifier la date d'expiration du cookie en javascript si vous le souhaitez.

2voto

rebagliatte Points 1525

Réponse courte

  1. Installer le MDN JavaScript Cookie Framework

  2. Sur votre fichier js :

    docCookies.setItem('my_cookie', 'my_cookie_value', '', '/');
  3. Sur votre contrôleur de rails :

    cookies[:my_cookie]

Réponse pas si courte

Rails ActionDispatch::Cookies Par défaut, le chemin d'accès au cookie est le Racine de l'application alors que simple JavaScript La valeur par défaut est le chemin actuel .

Cela signifie que si vous ne déclarez pas le chemin, vous vous retrouverez avec deux cookies différents portant le même nom et un casse-tête.

Pour résoudre ce problème, vous pouvez utiliser l'option "Application/Cookies" de la fenêtre DevTools de Chrome afin de voir tous les détails de chaque cookie et de recharger leurs valeurs lorsque vous les modifiez via le panneau "Console".

0voto

Jugulum Points 21

Cela peut expliquer votre problème. Apparemment, vous devez vous assurer que le chemin du cookie s'aligne.

Comment puis-je lire les cookies dans rails qui ont été définis par jquery ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X