我甚至不确定这是正确的问题。
我设置ActionCable来打开一个websocket连接,如果它只是app-name.herokuapp.com,它在heroku上运行得很好 但是当我尝试使用为应用设置的自定义域时,连接未经过验证。
所以,我正在尝试在客户端设置cookie,以便能够验证用户
通道/ application_cable / 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', current_user.email
end
protected
def find_verified_user # this checks whether a user is authenticated with devise
if cookies.signed['user.id']
verified_user = User.find_by(id: cookies.signed['user.id'])
verified_user
else
reject_unauthorized_connection
end
end
end
end
在example.com上 - 它继续作为未经授权的连接回归。但app-name.herokuapp.com连接正常。
初始化/ warden_hooks.rb
Warden::Manager.after_set_user do |user,auth,opts|
scope = opts[:scope]
auth.cookies.signed["#{scope}.id"] = user.id
end
我尝试允许来自herokuapp.com和example.com的电话: 环境/ production.rb
Rails.application.configure do
config.action_cable.url = 'wss://app-name.herokuapp.com//cable'
config.action_cable.allowed_request_origins = [ 'https://www.example.com', /http:\/\/www.example.com.*/, 'https://app-name.herokuapp.com', /http:\/\/app-name.herokuapp.com.*/ ]
end
为什么在自定义域上未经验证?如何设置cookie变量来验证它?我对这个概念有什么误解?
谢谢!
PS.Before有人试图添加为“回答” - 是的我将这个帖子的名称更改为example.com和app-name.herokuapp.com,不,它实际上并没有在我的代码中说:)