Аутентификация Websocket не работает с токенами Rails actioncable - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть соединение WebSocket, которое я пытаюсь аутентифицировать в файле connection.rb следующим образом.

  class Connection < ActionCable::Connection::Base
    identified_by :current_user

    def connect
      self.current_user = find_verified_user
    end

    private

    def find_verified_user
      find_api_user || find_app_user || reject_unauthorized_connection
    end

    def find_api_user
      token = request.params[:token]
      User.find_by(token: token) if token
    end

    def find_app_user
      (current_user = env['warden'].user) ? current_user : reject_unauthorized_connection
    end
  end
end

Но оно продолжает возвращать неавторизованных пользователей в производственном процессе, и старый токен отправляется на сервер. Интересным моментом является то, что он отлично работает, когда он только что развернут. Он развернут на Heroku. Я отправляю этот токен из внешнего интерфейса.


export const useChannel = (token, channelName, listeners) => {
 useEffect(() => {
   let mounted = true
   const ActionCable = require('actioncable')
   const socket = ActionCable.createConsumer(`${process.env.WS_URL}?token=${token}`)
   socket.subscriptions.create(channelName, listeners)

   mounted && socket.connect()

   return () => {
     mounted = false
     socket.disconnect()
   }
 }, [])
}

Я также проверил токен, который отправляется на сервер, и он в порядке. Но бэкэнд продолжает получать старый токен. Заранее спасибо.

...