У меня проблема с подключением к веб-сокету. Произошла ошибка:
Successfully upgraded to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" IS NULL LIMIT ? [["LIMIT", 1]]
An unauthorized connection attempt was rejected
Failed to upgrade to WebSocket (REQUEST_METHOD: GET, HTTP_CONNECTION: Upgrade, HTTP_UPGRADE: websocket)
Finished "/cable/" [WebSocket] for 127.0.0.1 at 2016-09-11 18:57:49 +0200
Finished "/cable/" [WebSocket] for 127.0.0.1 at 2016-09-11 18:57:49 +0200
connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
logger.add_tags 'ActionCable', "User #{current_user.id}"
end
protected
def find_verified_user
if verified_user = User.find_by(id: cookies.signed[:user_id])
verified_user
else
reject_unauthorized_connection
end
end
end
end
Я нашел решение, которое следует использовать config.allowed_request_origins
, но оно не решает мою проблему. Я пробовал использовать session_helper, добавив этот метод:
def set_cookie(user)
the_username = user.username.to_s
cookies.permanent.signed[:username] = the_username
end
Ничто не решает мою проблему.
Обновление: я видел, что проблема в том, что cookies.signed [: user_id] равно нулю. Есть ли у вас предложения, в чем может быть причина этого? Я использую стандартные URL и порт для тестов (localhost: 3000).
config.action_cable.allowed_request_origins
вconfig/environments/development.rb
с хостами, которым вы разрешите подключаться к вашему приложению через веб-сокеты. - person ethaning   schedule 17.03.2021