ruby-on-rails - Rails 方法在没有 session 的情况下限制页面访问

标签 ruby-on-rails ruby security

上下文

我正在 http://hivechatter.com 构建一个 super 简单、让你大吃一惊的性感注册页面 | . (是的,我对她有强烈的感觉。)

根页面是新用户操作,我只在其中请求电子邮件。如果访问者提交了有效的电子邮件,则会创建一个新用户,我会重定向到该用户的编辑页面并询问其他可选信息。

问题

编辑页面 url 是通常的形式:http://hivechatter.com/users/19/edit .只需使用他们选择的任何 ID 号访问此 URL,即可访问任何用户的编辑页面。

问题

如何限制对编辑用户页面的访问,使其只能访问一次,并且只能在从根新用户页面创建该 user_id 后立即访问?

我能想到多种探索的方法。我会很感激关于执行此操作的最优雅的 rails 方法的指示。请注意,我不需要任何其他功能,如 session 等。这两个步骤的注册过程是我现在需要的范围。

谢谢!

最佳答案

向您的用户表添加新列。让它成为 opened_once:boolean 和 DEFAULT false

然后在你的 users_controller

def edit
  @user = User.find( params[:id], :conditions => ['opened_once => ?', false] ) rescue ActiveRecord::RecordNotFound
  @user.update_attribute :opened_once, true
  ...
end

所以现在当您重定向到编辑页面时,它只能在创建新用户后立即显示一次

UPD

你有什么可以做更多的Rails方式吗?无需向您的数据库添加新内容等等。您可以完全删除 edit 操作,这样您的编辑 View 将在创建时呈现:

def create
  @user = User.new params[:user]
  respond_to do |format|
    if @user.save
      format.html{ render :action => :edit }
    else 
      format.html{ render :action => :new }
    end
  end
end

如果验证通过并创建了个人资料,用户只会看到一次编辑表单。

所以这是特定的 “Rails 方式” :)

关于ruby-on-rails - Rails 方法在没有 session 的情况下限制页面访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5370837/

相关文章:

ruby - 使用 sinatra,我如何从 3 个单独的输入框构造一个正确的 DateTime 值?

ruby-on-rails - 如何将 aria-label 属性添加到 View 中的链接?

ruby-on-rails - Ruby/Rails - 将整数转换为星期几

ruby-on-rails - 每周在 Heroku 上运行一次任务

ruby-on-rails - ActiveRecord::Migration.say_with_time() 做

sql-server - 为什么当SQL Server设置为强制加密时,SSMS允许登录,而SSMS登录选项中没有选择 'encrypt connection'选项

mysql - 将 MySQL 凭据存储在 MySQL 数据库中

php - 防止公开访问 env 文件

ruby-on-rails - tiny_tds : Segmentation fault

ruby-on-rails - rails 5 : Render a div for each child object in a collection