Backbone Marionette中的Access Devise Session?

时间:2014-09-02 21:20:34

标签: ruby-on-rails session backbone.js devise marionette

我正在创建一个使用Devise进行用户身份验证和Backbone Marionette作为前端的Rails应用程序。我无法弄清楚如何访问在后端创建的会话。我希望能够抓住用户名/电子邮件将其显示在我的Marionette应用程序中。

此外,检查会话是否存在可能很有用,但在大多数情况下,控制器中的设计认证似乎运行良好。

知道如何访问Backbone中的当前设计会话吗?

提前致谢!

1 个答案:

答案 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;