代码之家  ›  专栏  ›  技术社区  ›  Crashtor

ActionCable。服务器=>“/电缆”仅在经过身份验证的根路径内

  •  0
  • Crashtor  · 技术社区  · 7 年前

    考虑以下场景:

    def connect
      self.current_user = find_verified_user
      logger.add_tags "ActionCable", "User #{current_user.id}"
    end
    

    2) 建立连接后,通知用户

      connected: ->
        $("body").append("<div class='connection ok'>Connected.</div>")
    

    3) 当连接丢失时,通知用户

      disconnected: ->
        $("pop-up").append("<div class='connection'>Offline, trying to reconnect...</div>")
    

    4) 当用户注销时。。。。。

    An unauthorized connection attempt was rejected
    ###User is now informed connection is lost. Which should not happen.
    

    如何更改:

      mount ActionCable.server => '/cable'
    

     authenticated :user do
       root 'users#index', as: :authenticated_root
     end
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   Jay-Ar Polidario    7 年前

    替代解决方案

    拒绝了未经授权的连接尝试

    …发生在 reject_unauthorized_connection 在您的 connection.rb .

      • 去除 拒绝未经授权的连接 如果要允许未签名用户订阅频道: current_user nil

        • :session_id ) :

          module ApplicationCable
            class Connection < ActionCable::Connection::Base
              identified_by :current_user
              identified_by :session_id
          
              def connect
                self.current_user = find_verified_user
                self.session_id = request.session.id
              end
          
              private
          
              def find_verified_user
                User.find_by(id: cookies.signed[:user_id])
              end
          # ...
          
        • 您可能希望在您的*频道中写入您自己的授权。rb而不是连接中的此处。rb,如果您需要客人和登录用户之间的进一步授权规则。
      • 拒绝未经授权的连接