Rails默认更新用户密码策略的修改

来源:互联网 发布:非线性最优化方法 编辑:程序博客网 时间:2024/06/05 18:22

在Rails中一切都帮你考虑到,比如在需要密码验证的model中加上如下一句:

has_secure_password

则会帮你自动创建密码,密码确认以及密码求散的逻辑,很好很强大!!!

不过有些情况下我们不希望这个默认的操作,比如用户在编辑自己的信息时,如果不修改密码,而直接点确认更新按钮,则表示密码不变.但是常规的验证是必须输入密码的!

@staff.update_attributes(staff_params)

上面一句肯定会失败,因为model中做了验证:

    has_secure_password    VALID_PASSWORD_REGEX = /\A[^*\s]+\z/i    validates :password,length:{minimum:6}    validates :password,format:{with:VALID_PASSWORD_REGEX}

为了达到用户直接点击确认更新不更新密码的功能,我们需要做点调整,首先在edit的密码和密码确认框中输入一些非法字符,比如”*******”

然后在update逻辑中进行判断:

if @staff.errors.messages.count == 1 && @staff.errors.messages[:password] && params[:staff][:password] == "******"        params[:staff].delete(:password)        params[:staff].delete(:password_confirmation)        @staff.update_columns(staff_params)        flash[:success] = "#{@staff.name} 用户信息修改成功"        redirect_to @staff        return      end

如果用户没有输入密码,则跳过验证直接修改model!注意因为update_columns操作不会修改记录中的updated_at日期,所以还需要一个神奇的touch方法为你解忧:

@staff.touch
0 0
原创粉丝点击