根本不删除此功能。
我有表单输入,但是在没有重定向的情况下,我没有将验证视图渲染失败,而是将用户重定向到new
页面,但是将其输入存储在Redis
中,因此不要错误消息和他的实际参赛作品:
def create_list
result=super
if result[:all_records_saved]
redirect_to program_stream_path(@stream.program, @stream)
else
redirect_to new_students_list_stream_path(@stream, :invalid_entry_id=>result[:id])
end
end
我将无效条目传递给方法redis_store
(添加redis会话)
def redis_store(invalid_entries)
if $redis.exists("invalid_entries_ids")
id = $redis.incr("invalid_entries_ids")
else
$redis.set("invalid_entries_ids", 0, ex: 600)
id = 0
end
invalid_entries.each do |entry|
$redis.multi do
$redis.rpush("invalid_entries_attr:#{id}", entry[0])
$redis.rpush("invalid_entries_errors:#{id}", entry[1])
$redis.expire("invalid_entries_attr:#{id}", 600)
$redis.expire("invalid_entries_errors:#{id}", 600)
end
end
id
end
因此,使用params[:invalid_entry_id]
重定向用户,然后其他方法使用此ID从redis
获取数据。
问题
我只是明白,如果有人得到这个重定向:
/edit-students-list?invalid_entry_id=1
他可以将其改为
/edit-students-list?invalid_entry_id=0
或者任何小于他实际获得的身份证,并且访问他并不意味着可以访问的数据。
这不是什么大事,但我想避免它而不去除为使这个功能起作用而付出的所有努力。
我注意到Rails flash
不需要任何参数或外部指针来找出哪个闪存属于哪个请求。我如何在我的redis store / get函数中实现它?还是其他任何解决方案?