身份验证 – 验证stomp Web套接字客户端

我在部署到扭矩箱的导轨应用上有一个ruby.我需要一些方法来保护我的应用程序中的websockets.我正在使用stomp websockets,有没有办法在用户进行websocket连接时对用户进行身份验证?我可以使用用户名和密码参数,但它们目前被忽略.有没有其他方法来验证此连接?谢谢! 最佳答案 您可以使用会话和存储的令牌向Stomplet验证消息.为此,您必须设置Rails才能使用Torquebox会话存储.这可以使用初始化程序完成,例如config / initializers / torquebox_init.rb:

AppName::Application.config.session_store :torquebox_store

现在,Stomplet将可以访问会话.下面是一个示例Stomplet,它使用会话参数:authentication_token来匹配数据库中用户的authentication_token.检查身份验证令牌是否订阅,发送消息和取消订阅:

require 'torquebox-stomp'

class StompletDemo

  def initialize()
    super
    @subscribers = []
  end

  def configure(stomplet_config)
  end

  def on_message(stomp_message, session)
    token = session[:authentication_token]

    if is_authenticated?( token )
      @subscribers.each do |subscriber|
        subscriber.send( stomp_message )
      end
    end
  end

  def on_subscribe(subscriber)
    session = subscriber.session
    if is_authenticated?(session[:authentication_token])
      @subscribers << subscriber
    end
  end

  def on_unsubscribe(subscriber)
    session = subscriber.session
    if is_authenticated?(session[:authentication_token])
      @subscribers.delete( subscriber )
    end
  end

  def is_authenticated?(token)
    User.where( authentication_token: token ).exists?
  end

end

现在,您所要做的就是确保在用户进行身份验证时设置了会话[:authentication_token].大多数情况下,这将在控制器中设置:

 # user has successfully authenticates
 session[:authentication_token] = @user.authentication_token
点赞