Tôi gặp sự cố với kết nối với ổ cắm web. Có một lỗi:ActionCable - không thể nâng cấp lên WebSocket
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
Tôi tìm thấy một số giải pháp mà tôi nên sử dụng config.allowed_request_origins
, nhưng nó không giải quyết được vấn đề của tôi. Tôi đã thử với session_helper bằng cách thêm phương thức này:
def set_cookie(user)
the_username = user.username.to_s
cookies.permanent.signed[:username] = the_username
end
Không có gì sửa chữa sự cố của tôi.
Cập nhật: Tôi thấy rằng vấn đề là cookie.signed [: user_id] là không. Bạn có đề nghị gì về nguyên nhân này? Tôi sử dụng URL tiêu chuẩn và cổng cho các bài kiểm tra (localhost: 3000).
Điều này là không đủ. Bằng cách này, bạn vừa xóa lỗi khi người dùng đăng nhập. Nhưng nếu người dùng không đăng nhập - lỗi ** vẫn tồn tại **. Điều này là do 'App.room = App.cable.subscriptions.create" RoomChannel "' gọi 'bên trong room.coffee' (hoặc giống như trong mã của bạn). Giải pháp sẽ có điều kiện là 'room.coffee' phụ thuộc vào việc người dùng có đăng nhập hay không - nhưng điều đó sẽ yêu cầu loại trừ' room.coffee' khỏi nội dung - và hiển thị riêng của nó (vì bạn không thể render js nếu có điều kiện người dùng đăng nhập/đăng xuất). – prograils