发送操作电缆消息时的当前用户上下文

时间:2018-05-31 10:32:58

标签: ruby-on-rails active-model-serializers actioncable

我有一个使用活动模型序列化器构建的REST api的rails应用程序。

为了简单起见 - 请假设我有Post序列化程序返回title帖子,is_voted返回truefalse }值取决于当前登录的用户是否对此故事进行了投票。

  attribute :is_voted do
    voteable_ids = current_user.account.votes.where(voteable_type: 'Post').map(&:voteable_id)

    voteable_ids.include? object.id
  end

到目前为止,这一切都很有效但当我想通知javascript客户端有关Post记录中的更改时,事情变得棘手。

让我们说标题已更改,我想发送一个关于该事件的动作事件:

ActionCable.server.broadcast 'updates_channel', {
  event: 'posts.updated',
  data: ActiveModelSerializers::SerializableResource.new(post).to_json
}

事情是 - 当发送这样的事件时,我不知道此时current_user是什么,因为它是由后端触发的。或者基本上可以由其他用户触发。但如果我说得对,行动终端知道谁是current_user,理论上,它可以被注入。

我在想 - 是否有可能将current_user注入某种可操作的中间件中的序列化程序?我可以使用identified_by :current_user对用户电缆端点的用户进行身份验证,但我不知道如何在该场景中使用它。

另一个想法是发送关于帖子正在使用帖子ID更新的事件。后来,在JS方面,我可以使用常规REST api获取特定帖子并更新视图 - 但这听起来像是一个非常不理想的解决方案。

0 个答案:

没有答案