首页 > 解决方案 > Rails 实时聊天:仅使用纯 JavaScript 实现它是否安全?

问题描述

我只使用 vanilla javascript 向我的 rails 应用程序添加了实时聊天。我已经把它包括在下面了。我只是想知道,看看我提供的代码是否有任何安全问题?我只是不确定 AJAX 注入是否有任何问题或我需要担心的任何未知未知数。我没有添加 ActionCable 主要是因为我不需要它的所有功能。谢谢你的帮助!:)

聊天中有 2 个用户之间的许多私人消息。用户有很多消息。我使用 pundit 添加了策略,因此只有授权用户才能访问聊天。而且我正在使用设计,因此只有登录的用户才能访问聊天。每个模型都使用 UUID。

聊天/show.html.erb

<% if @messages %>
  <div id="messages">
    <%= render @messages %>
  </div>
<% end %>      
<%= form_with(model: [@chat, Message.new], local: false, html: { id: "message-form" }) do |form| %>
  <div class="field">
    <%= form.text_area :content, placeholder: "Send a message" %>
  </div>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %>

消息/_message.html.erb

<%= message.user.name %>
<%= message.content %>

消息/create.js.erb

var messages = document.querySelector("#messages");
messages.insertAdjacentHTML("beforeend", "<%= j render(@message) %>"); 
document.getElementById("message-form").reset();

控制器/messages_controller.rb

def create
  @chat = Chat.find(params[:chat_id])
  @message = @chat.messages.build(message_params)
  @message.user = current_user
  authorize @message
  
  respond_to do |format|
    if @message.save
      format.html { redirect_to @chat, notice: 'Message was successfully created.' }
      format.js
      format.json { render :show, status: :created, location: @chat }
    else
      format.html { redirect_to @chat, alert: 'Message not created.' }
      format.json { render json: @message.errors, status: :unprocessable_entity }
    end
  end
end

控制器/chats_controller.rb

 def show                                      
   @listing = Listing.find(params[:listing_id])
   @chats = @listing.chats
   @chat = Chat.find(params[:id])
   if @chat.messages
     @messages = @chat.messages
   end
 end

标签: javascriptruby-on-railsajaxchatujs

解决方案


推荐阅读