一段JavaScript代码在初始化WebSockets连接时发送UserId。这需要将UserId从Rails视图传递到JavaScript源。
我不喜欢这个解决方案有两个原因:
*.js
文件中,而不必将其部分包含在布局中更好的解决方案显而易见:在任何情况下,来自经过身份验证的用户的每个WebSocket连接都伴随着cookie中的Devise的SessionID。我已经找到了如何从握手数据中提取这个cookie,现在有一个问题:
WebSockets侦听器在后台线程中不断运行,无论某个用户是否经过身份验证。因此,它无法访问用户的会话。
问题:
如果我未经过身份验证,如何通过SessionID获取用户或UserId。 Devise是否在我可以访问的内存中有一些SessionID存储(可能有一些讨厌的黑客攻击)。
答案 0 :(得分:0)
在用户会话中设计warden存储的东西。因此,如果您无权访问该会话,则此单独线程中的user_id也没有。
由于您在脚本中无论如何都要公开user_id,因此您只需将其设置为其他cookie即可。
你也可以实现一个返回id的api enpoint。
您可以在一些不可见的数据中将其呈现在页面中 - '属性
<body data-user-id='asfasdfeefifpf'> ... </body>.
或者至少你可以将代码保存在js partial中,它设置id并将lib代码解压缩到单独的文件中。
<%= javascript_tag do %>
window.user_id = '<%= j current_user.id %>';
<% end %>
http://railscasts.com/episodes/324-passing-data-to-javascript?view=asciicast