2014-09-02 70 views
1

我正在创建一个Rails应用程序,它使用Devise进行用户身份验证,并将Backbone Marionette作为前端。我无法确定如何访问在后端创建的会话。我希望能够说出用户名/电子邮件,以将其显示在我的Marionette应用程序中。Backbone Marionette访问设计会话?

此外,检查会话是否存在可能很有用,尽管在大多数情况下,控制器中的设计认证似乎工作得很好。

任何想法如何我可以访问在骨干目前的设计会议?

在此先感谢!

回答

1

导轨3

的会话cookie被存储为_app_session。他们看起来很模糊,但他们只是base64编码。您可以使用客户端上的atob函数解码会话cookie并读取您放入其中的任何信息。 (在Rails 4,你可能正在使用加密的会话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: "[email protected]" }.to_json, 
    domain: "my.sweetapp.com" 
} 

在您的客户端读取该cookie:(使用一个lib像$.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; 
+0

是啊,我m摇动一些Rails 4.对此有什么建议? :) – 2014-09-02 21:40:58

+0

很酷。添加了我会在Rails 4中做的事。 – 2014-09-03 17:03:12

+0

非常感谢!这真的很有帮助 – 2014-09-03 22:25:00