Ruby on rails 如何防止用户在创建帐户后更改用户名
我是rails的新手,正在开发一个涉及用户帐户的小应用程序。目前,用户可以更改/更新其姓名、电子邮件和密码。用户也有一个唯一的用户名,但我想阻止用户更改它。我该如何预防这种情况Ruby on rails 如何防止用户在创建帐户后更改用户名,ruby-on-rails,authentication,Ruby On Rails,Authentication,我是rails的新手,正在开发一个涉及用户帐户的小应用程序。目前,用户可以更改/更新其姓名、电子邮件和密码。用户也有一个唯一的用户名,但我想阻止用户更改它。我该如何预防这种情况 我已经在attr_accessible中包含了用户名,以允许在注册时创建它,但我想在用户名出现后以某种方式删除它。到目前为止,我唯一的限制是缺少用户名编辑表单,但我知道这不会阻止创造性用户发出更改它的PUT请求。最简单的方法是在控制器的更新操作中删除参数,然后再将其传递到update_attributes函数中,如下所示
我已经在attr_accessible中包含了用户名,以允许在注册时创建它,但我想在用户名出现后以某种方式删除它。到目前为止,我唯一的限制是缺少用户名编辑表单,但我知道这不会阻止创造性用户发出更改它的PUT请求。最简单的方法是在控制器的更新操作中删除参数,然后再将其传递到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
或者,您也可以使用动态质量分配安全性,如中所示,其要点是覆盖模型中的质量分配授权器函数,以添加您希望可以访问质量分配的任何额外属性。利用这个想法,你可以做如下事情:
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
只需反转任何尝试的更改
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