Ruby on rails 在此操作之前是否需要正确的用户?
我有2个型号,用户和普通应用程序 用户有一个常用的应用程序 在common_app controller中,我使用当前的_用户助手定义了几乎所有内容。这基本上使得编辑表单忽略用户通过web浏览器发布的id 看起来是这样-->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
我看这里没有任何安全问题。即使没有
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