我发现了一个很棒的 ActionCable gem,它是 SPA 的一个很好的解决方案。
我只想发送html
, css
and js
资产,所有其他连接将通过ActionCable
。交换字符串或者整数并不难,但是如何通过ActionCable登录呢?
来自Readme https://github.com/rails/actioncable/blob/02238/README.md#a-full-stack-example
# app/channels/application_cable/connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
protected
def find_verified_user
if current_user = User.find(cookies.signed[:user_id])
current_user
else
reject_unauthorized_connection
end
end
end
end
所以看起来你可以插入你自己的find_verified_user
逻辑在这里。这reject_unauthorized_connection
方法存在于lib/action_cable/connection/authorization.rb
以供参考。
From Heroku https://devcenter.heroku.com/articles/websocket-security#authentication-authorization:
[身份验证] 可以通过多种方式完成,WebSockets 将
传递常用于身份验证的标准 HTTP 标头。
这意味着您可以使用相同的身份验证机制
也可用于 WebSocket 连接上的 Web 视图。
由于您无法从 JavaScript 自定义 WebSocket 标头,因此您只能
从发送的“隐式”身份验证(即基本或 cookie)
浏览器。此外,通常有服务器来处理
WebSocket 与处理“普通”HTTP 的 WebSocket 完全分开
要求。这可能会使共享授权标头变得困难或
不可能的。
考虑到这一点,如果不使用正常的 Web 登录流程来设置您的身份验证 cookie,并在身份验证步骤之后交付您的 SPA,那可能会很痛苦,但希望这可以给您一些指导。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)