"The ActionCable connection is not open! `this.isActionCableConnectionOpen()` must return true before calling `this.stimulate()`"
"The ActionCable connection is not open! `this.isActionCableConnectionOpen()` must return true before calling `this.stimulate()`"
我在使用 rails 6.
访问刺激反射时遇到上述错误
<a href="#"
data-reflex="click->VotesReflex#increment"
data-step="1"
data-count="<%= @count.to_i %>"
>Increment <%= @count.to_i %></a>
class VotesReflex < ApplicationReflex
delegate :current_user, to: :connection
def increment
@count = element.dataset[:count].to_i + element.dataset[:step].to_i
end
end
您应该用 current_user 识别连接以打开连接。假设您正在使用 devise 进行身份验证。
这是你应该做的。
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
private
def find_verified_user
# rubocop:disable Lint/AssignmentInCondition
if verified_user = User.find_by(id: cookies.signed['user.id'])
verified_user
else
reject_unauthorized_connection
end
end
end
end
在您的初始化程序中,创建 warden_cookies.rb
Warden::Manager.after_set_user do |user, auth, opts|
scope = opts[:scope]
auth.cookies.signed["#{scope}.id"] = user.id
auth.cookies.signed["#{scope}.expires_at"] = 30.minutes.from_now
end
Warden::Manager.before_logout do |_user, auth, opts|
scope = opts[:scope]
auth.cookies.signed["#{scope}.id"] = nil
auth.cookies.signed["#{scope}.expires_at"] = nil
end
我在使用 rails 6.
访问刺激反射时遇到上述错误 <a href="#"
data-reflex="click->VotesReflex#increment"
data-step="1"
data-count="<%= @count.to_i %>"
>Increment <%= @count.to_i %></a>
class VotesReflex < ApplicationReflex
delegate :current_user, to: :connection
def increment
@count = element.dataset[:count].to_i + element.dataset[:step].to_i
end
end
您应该用 current_user 识别连接以打开连接。假设您正在使用 devise 进行身份验证。
这是你应该做的。
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = find_verified_user
end
private
def find_verified_user
# rubocop:disable Lint/AssignmentInCondition
if verified_user = User.find_by(id: cookies.signed['user.id'])
verified_user
else
reject_unauthorized_connection
end
end
end
end
在您的初始化程序中,创建 warden_cookies.rb
Warden::Manager.after_set_user do |user, auth, opts|
scope = opts[:scope]
auth.cookies.signed["#{scope}.id"] = user.id
auth.cookies.signed["#{scope}.expires_at"] = 30.minutes.from_now
end
Warden::Manager.before_logout do |_user, auth, opts|
scope = opts[:scope]
auth.cookies.signed["#{scope}.id"] = nil
auth.cookies.signed["#{scope}.expires_at"] = nil
end