Ruby on rails 在此操作之前是否需要正确的用户?

Ruby on rails 在此操作之前是否需要正确的用户?,ruby-on-rails,Ruby On Rails,我有2个型号,用户和普通应用程序 用户有一个常用的应用程序 在common_app controller中,我使用当前的_用户助手定义了几乎所有内容。这基本上使得编辑表单忽略用户通过web浏览器发布的id 看起来是这样--> 我看这里没有任何安全问题。即使没有before\u action:signed\u in\u user,因为您总是通过当前用户.common\u app关联,如果用户未登录,操作也会失败 所以控制器是可靠的。只要您的身份验证系统没有缺陷,控制器本身就不会暴露任何弱点 在Ru

我有2个型号,用户和普通应用程序

用户有一个常用的应用程序

在common_app controller中,我使用当前的_用户助手定义了几乎所有内容。这基本上使得编辑表单忽略用户通过web浏览器发布的id

看起来是这样-->


我看这里没有任何安全问题。即使没有
before\u action:signed\u in\u user
,因为您总是通过
当前用户.common\u app
关联,如果用户未登录,操作也会失败

所以控制器是可靠的。只要您的身份验证系统没有缺陷,控制器本身就不会暴露任何弱点

在Ruby中,前缀为“@”的变量是实例变量。在Rails控制器的上下文中,区别很简单:


将实例变量用于您希望视图可用的值,将普通变量用于其他所有值。

您的
:signed\u in\u user
过滤器是否在其他地方定义?在
ApplicationController
中,您好,Janfohe,登录用户是在SessionHelper下定义的,让我更新-->一个
更正用户的过滤器会做什么?你怀疑这里遗漏了什么?我有一个noob怀疑,可能有一种方法可以访问其他人的公共应用程序,并对其进行编辑。这是一个相当简单的应用程序,我相信没有人愿意这么做,但仍然希望确保某种黑客无法更新或查看其他人的常用应用程序
class CommonAppsController < ApplicationController
  before_action :signed_in_user

  def new
    if current_user.common_app.present?
      redirect_to current_user
    else
      @common_app = current_user.build_common_app
    end
  end

  def create 
    @common_app = current_user.build_common_app(common_app_params)
    if @common_app.save
        flash[:success] = "Common App Created!"
        redirect_to root_url
    else
        redirect_to 'common_apps/new'
    end
  end

  def update
    if current_user.common_app.update_attributes(common_app_params)
      flash[:success] = "Common App Updated"
      redirect_to root_url
    else
      render 'common_apps/edit'
    end
  end

  def show
    @common_app = current_user.common_app
  end

  def edit
    @common_app = current_user.common_app
  end

  private

    def common_app_params
      params.require(:common_app).permit(:current_city,:grad_year,:read_type,
                                          :listen_speak,:time_in_china,
                                          :cover_letter,:resume) ####fill in the correct ones here
    end

    # is correct_user necessary?
end
module SessionsHelper
  def sign_in(user)
    remember_token = User.new_remember_token
    cookies.permanent[:remember_token] = remember_token
    user.update_attribute(:remember_token, User.encrypt(remember_token))
    self.current_user = user
  end
  def signed_in?
    !current_user.nil?
  end

  def current_user=(user)
    @current_user = user
  end

  def current_user
    remember_token = User.encrypt(cookies[:remember_token])
    @current_user ||= User.find_by(remember_token: remember_token)
  end

  def current_user?(user)
    user == current_user
  end

  def sign_out
    self.current_user = nil
    cookies.delete(:remember_token)
  end

  def redirect_back_or(default) # this creates friendly forwarding for the app
    redirect_to(session[:return_to] || default)
    session.delete(:return_to)
  end

  def store_location
    session[:return_to] = request.url if request.get?
  end

  def signed_in_user
    unless signed_in?
      store_location
      redirect_to signin_url, notice: "Please sign in."
    end
  end


end