Rails中的用户会话认证5

我正在尝试使用Rails 5中的操作电缆实现通知。

阅读Action电缆教程后,该电缆在会话和基于Cookie的身份validation上工作,以接收当前登录用户的通知。

module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :current_user def connect self.current_user = find_verified_user logger.add_tags 'ActionCable', current_user.username end protected def find_verified_user if verified_user = env['warden'].session(:user) verified_user else reject_unauthorized_connection end end end 

在find_verified_user中,我无法从会话中获取用户对象。

任何人都可以帮助我,在行动电缆中validation用户。

如果您的session_storeconfig/initializers/session_store.rb )使用:cookie_store ,那么您可以从加密的cookie中读取会话:

 module ApplicationCable class Connection < ActionCable::Connection::Base identified_by :current_user def connect if user = User.find_by(id: session[:user_id]) self.current_user = user else reject_unauthorized_connection end end private def session key = Rails.application.config.session_options.fetch(:key) cookies.encrypted[key]&.symbolize_keys || {} end end end 

由于您无法访问会话,因此必须使用cookie:

1)转到your_app / config / initializers / session_store.rb并粘贴此代码:

 Rails.application.config.session_store :cookie_store, key: 'your_super_secret_code' 

2)在任何地方都可以获得用户ID:

  key = Rails.application.config.session_options.fetch(:key) cookies.encrypted[key]&.symbolize_keys || {} User.find(cookies["warden.user.user.key"][0][0]) 

会话示例: 如何通过会话ID找到设计用户?