我正在创建一个使用Devise进行用户身份验证和Backbone Marionette作为前端的Rails应用程序。我无法弄清楚如何访问在后端创建的会话。我希望能够抓住用户名/电子邮件将其显示在我的Marionette应用程序中。
此外,检查会话是否存在可能很有用,但在大多数情况下,控制器中的设计认证似乎运行良好。
知道如何访问Backbone中的当前设计会话吗?
提前致谢!
答案 0 :(得分:1)
Rails 3
会话cookie存储为_app_session
。它们看起来模糊不清,但它们只是base64编码。您可以使用客户端上的atob
功能解码会话cookie并读取您在其中放置的任何信息。 (在Rails 4中,你可能正在使用加密的会话cookie,你需要做一些不同的事情)
示例cookie可能如下所示:
"BAh7CEkiD3Nlc3Npb25faWQGOgZFVEkiJWNlZjFjMDhiNjYyNWEzZDI5YWM5MTJlMDY3MmQ0NTM4BjsAVEkiGXdhcmRlbi51c2VyLnVzZXIua2V5BjsAVFsISSIJVXNlcgY7AEZbBmkHSSIiJDJhJDEwJE5MYlhOWHFUMEtoZmdnNFliZHdyeE8GOwBUSSIQX2NzcmZfdG9rZW4GOwBGSSIxSSt6TnJsZm1FOTZTNWFRWGdSVWtGK2Zmd3BPVUxkQURjWHBqZ2NoZ05nMD0GOwBG"
它会解码成这样的东西:
atob(cookieStr);
"{I"session_id:ETI"%cef1c08b6625a3d29ac912e0672d4538;�TI"warden.user.user.key;�T[I" User;�F[iI""$2a$10$NLbXNXqT0Khfgg4YbdwrxO;�TI"_csrf_token;�FI"1I+zNrlfmE96S5aQXgRUkF+ffwpOULdADcXpjgchgNg0=;�F"
Rails 3/4
我不是从会话cookie中读取,而是添加一个单独的cookie,或者只是使用您想要的数据来引导您的HTML代码。
在你的控制器中设置你自己的cookie或设计钩子:
cookies[:my_data] = {
value: { username: "rocketman", email: "cliff.secord@gmail.com" }.to_json,
domain: "my.sweetapp.com"
}
在您的客户端中读取该cookie :(使用类似$.cookie的库来简化阅读)
var cookieData, cookies = document.cookie.split('; ');
for (var i = 0, parts; (parts = cookies[i] && cookies[i].split('=')); i++) {
if (decode(parts.shift()) === "my_data") {
cookieData = JSON.parse(decode(parts.join('=')));
}
}
// Do something with cookieData;