The*_*per 4 authentication ruby-on-rails devise phoenix-framework
我有一个相当典型的Rails应用程序,它使用Devise进行身份验证管理.在构建这个应用程序时,我意识到实时聊天将是一个很棒的功能.理想情况下,当然,这将使用Websockets,以减少服务器上的轮询负载(以及使其更容易实现,因为您不必管理轮询).
我很快意识到Ruby并不适合同时打开大量并发连接.然而,Phoenix是用Elixir编写的,所以我可以使用Erlang VM,它非常适合长连接.如果所有聊天数据都与主应用程序数据库分开存储,这似乎也会非常有益,这也应该减少将来的负载.
我希望能够使用户完全看不到这种分离.他们访问www.example.com/chat,并从中加载所有相关数据chat.example.com并启动websockets,而无需他们登录到单独的服务.我认为使用a <iframe>可能就是这样做的方法.
我的问题是在两个应用程序之间共享身份验证和数据.Rails应用程序需要能够在Phoenix应用程序上创建对话以响应某些事件.Phoenix应用程序需要知道当前对Rails进行身份验证的用户以及有关用户的常规数据.
使用Rails应用程序作为ID提供程序的OAuth流程起初似乎很合适,但我无法找到一种方法让Phoenix应用程序自动获得访问权限.我也对Phoenix应用程序中存在的用户记录有一些顾虑 - 它应该知道主应用程序上的所有用户,因此即使他们还没有打开过聊天,你也可以开始与用户聊天.
这样做最好的方法是什么?我的直觉说这将涉及window.postMessage到某种令牌系统,但是我想问一下,在我不小心造成一个不安全的混乱之前,这种普遍接受的做法是什么.
假设您至少运行Rails 4.1并使用JSON序列化(对于使用> = 4.1创建的应用程序的默认值),共享会话并不太难.快速谷歌搜索找到PlugRailsCookieSessionStore,它完成了这一点.
有关如何在Rails和其他语言之间共享会话的更多信息,Matt Aimonetti有一篇精彩的博客文章,其中包含详细信息.
最后,如果你更愿意完全使用Ruby,那肯定是可行的.Ryan Stout讨论了Volt FAQ中持久连接的可扩展性,它为每个用户使用持久连接.他链接的文章也很精彩.只需提一下它就可以帮助您权衡利用另一种语言构建单独的应用程序的权衡.
| 归档时间: |
|
| 查看次数: |
455 次 |
| 最近记录: |