如何防止用户在创建帐户后更改其用户名

时间:2012-07-14 01:43:38

标签: ruby-on-rails authentication username

我对rails很新,我正在开发一个涉及用户帐户的小应用程序。目前,用户可以更改/更新其姓名,电子邮件和密码。用户还有一个唯一的用户名,但我想阻止用户更改它。我该如何防止这种情况?

我在attr_accessible中包含了用户名以允许在注册时创建它,但是我想在用户名出现后以某种方式删除它。我到目前为止唯一的限制是缺少用户名编辑表单,但我知道这不会阻止创意用户发出PUT请求来更改它。

2 个答案:

答案 0 :(得分:2)

最简单的方法是在控制器的更新操作中将参数传递到update_attributes函数之前删除它,如下所示:

#UsersController
def update
  params[:user].delete(:username)
  @user = user.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:notice] = "Successfully updated user."
    redirect_to @user
  else
    render :action => 'edit'
  end
end

或者,您可以使用this RailsCast中显示的动态质量分配安全性,这个要点是您覆盖模型中的mass_assignment_authorizer函数以添加您想要访问的任何额外属性大规模任务。使用这个想法,你可以做类似的事情:

class User < ActiveRecord::Base
  attr_accessible #what ever other stuff you wan't to accessable

  private
  def mass_assignment_authorizer
    new_record? ? super + [:username] : super
  end
end

答案 1 :(得分:0)

只需撤消任何尝试的更改......

class User
  before_update :revert_username_if_changed, :if => Proc.new { |u| u.username_changed? }

  def revert_username_if_changed
    self.username = self.username_was
  end
end