ruby-on-rails-4 – 在Rails 4中使用has_secure_password时编辑更新用户不工作

ruby-on-rails-4 – 在Rails 4中使用has_secure_password时编辑更新用户不工作,第1张

概述我正在使用Michael Hartl的 Ruby on Rails tutorial制作我自己的用户身份验证系统.创建新用户时一切正常.当尝试更新用户时,事情不再有意义.我正在使用has_secure_password方法.所以我让它担心取密码并加密它.但是当我更新时,会发生一些奇怪的行为. 重要的是我可以在不输入任何密码及其确认的情况下更新用户.但是如果我输入密码而没有确认,则需要确认.如果我只 我正在使用Michael Hartl的 Ruby on Rails tutorial制作我自己的用户身份验证系统.创建新用户时一切正常.当尝试更新用户时,事情不再有意义.我正在使用has_secure_password方法.所以我让它担心取密码并加密它.但是当我更新时,会发生一些奇怪的行为.

重要的是我可以在不输入任何密码及其确认的情况下更新用户.但是如果我输入密码而没有确认,则需要确认.如果我只输入确认密码,则更新时没有错误.既然has_secure_paassword假设是在做那个部分,为什么在更新时不这样做呢?我没有在我的用户模型中添加的一件事是由于本教程中的这一行而进行了状态验证:

Presence valIDations for the password and its confirmation are
automatically added by has_secure_password.

我知道在这方面有类似的问题,但似乎都没有强制执行强参数,这是我猜测为什么它不适合我.我的一些代码如下.

用户控制器

def edit    @user = User.find(params[:ID])enddef update    @user = User.find(params[:ID])    # if params[:user][:password].blank?    #   render 'edit'    #   return    # end    if @user.update(user_params)        redirect_to @user,notice: 'User successfully updated'    else        render 'edit',notice: 'Failed to update profile.'    endenddef user_params    params.require(:user).permit(        :username,:email,:phone,:bio,:password,:password_confirmation        )end

用户模型

class User < ActiveRecord::Base  before_save {self.email = email.downcase}  has_secure_password  before_create :create_remember_token  valIDates :username,presence: true,length: {maximum: 255,minimum: 5},format: { with: /\A[a-zA-Z0-9]*\z/,message: "may only contain letters and numbers." },uniqueness: true  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i  valIDates :email,format: { with: VALID_EMAIL_REGEX }  #... Other User stuff.

编辑表格

<div >  <%= form_for(@user,:HTML => {:class => 'well'}) do |f| %>    <div >      <%= f.label :username %><br />      <%= f.text_fIEld :username,class: 'form-control' %>    </div>    <div >      <%= f.label :phone %><br />      <%= f.phone_fIEld :phone,class: 'form-control' %>    </div>    <div >      <%= f.label :bio %><br />      <%= f.text_area :bio,class: 'form-control' %>     </div>    <div >      <%= f.label :email %><br />      <%= f.email_fIEld :email,class: 'form-control' %>    </div>    <div >      <%= f.label :password %><br />      <%= f.password_fIEld :password,class: 'form-control' %>    </div>    <div >      <%= f.label :password_confirmation %><br />      <%= f.password_fIEld :password_confirmation,class: 'form-control' %>    </div>    <div >      <%= f.submit "Update",class: 'btn btn-default' %>    </div>  <% end %></div>
解决方法 由于这是更新 *** 作而不是创建,因此验证可能未在运行.

从ActiveModel::SecurePassword开始:

ValIDations for presence of password on create,confirmation of password (using a password_confirmation attribute) are automatically added.

来自secure_password.rb的相关代码部分

def has_secure_password(options = {})  ...  if options.fetch(:valIDations,true)    valIDates_confirmation_of :password,if: lambda { |m| m.password.present? }    valIDates_presence_of     :password,:on => :create    valIDates_presence_of     :password_confirmation,if: lambda { |m| m.password.present? }  end  ...end
总结

以上是内存溢出为你收集整理的ruby-on-rails-4 – 在Rails 4中使用has_secure_password时编辑/更新用户不工作全部内容,希望文章能够帮你解决ruby-on-rails-4 – 在Rails 4中使用has_secure_password时编辑/更新用户不工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1275702.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存