Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 这些密码更新不起作用有什么原因吗?_Ruby On Rails_Ruby_Ruby On Rails 4_Bcrypt_Bcrypt Ruby - Fatal编程技术网

Ruby on rails 这些密码更新不起作用有什么原因吗?

Ruby on rails 这些密码更新不起作用有什么原因吗?,ruby-on-rails,ruby,ruby-on-rails-4,bcrypt,bcrypt-ruby,Ruby On Rails,Ruby,Ruby On Rails 4,Bcrypt,Bcrypt Ruby,我正在为我的rails应用程序创建密码重置令牌 在我的用户控制器中,使用bcryptruby,rails脚手架通过内置的验证/保存来处理所有事情。然而,现在我有点困难 在我的ResetToken控制器中,我有以下方法: def do_reset @token = ResetToken.find_by(token: params[:id]) if request.post? user = @token.user user.password = par

我正在为我的rails应用程序创建密码重置令牌

在我的用户控制器中,使用bcryptruby,rails脚手架通过内置的验证/保存来处理所有事情。然而,现在我有点困难

在我的ResetToken控制器中,我有以下方法:

def do_reset
    @token = ResetToken.find_by(token: params[:id])
    if request.post?
        user = @token.user
        user.password = params[:password]
        user.password_confirmation = params[:password_confirmation]
        if user.save
            redirect_to shop_url
        end
    else
    end
end
在相应的视图中,此表单:

<%= form_tag do %>
<div class="row">
  <div class="form-group">
    <div class="col-md-6">
      <%= label_tag :password %><br>
      <%= password_field :password, class: "form-control" %>
    </div>
    <div class="col-md-6">
      <%= label_tag :password_confirmation %>
      <%= password_field :password_confirmation, class: "form-control" %>
    </div>
  </div>
</div>

<div class="row">
  <div class="col-md-12">
    <%= submit_tag "Update Password", class: "btn btn-primary pull-left push-bottom" %>
  </div>
</div>
<% end %>
从rails控制台

用户模型具有安全密码是触发bcrypt哈希的原因


这可能有助于说明如何定义Userpassword=和Userpassword\u confirmation=方法,以确保它们被哈希化,而不是以纯文本形式保存在数据库中。为什么要检查request.post?而不是创建RESTful控制器和路由?我很好奇你是否真的得到了一个不同的HTTP方法,这是在条件上短路。@AustinMullins刚刚添加了一个更新,希望能回答你的问题。@coreyward无知可能?尽管如此,我还是很有信心?正在被触发。添加后,如果在密码不匹配的情况下触发user.save验证。同时更新了时间戳上更新的_,并触发重定向。话虽如此,我完全愿意接受您提出的任何建议/改进。
create_table "users", force: true do |t|
    t.string   "first_name"
    t.string   "last_name"
    t.string   "email"
    t.string   "password_digest"
    ... 
end
2.0.0p247 :001 > u = User.find_by(email: 'drew.j.wyatt@gmail.com')
  User Load (0.1ms)  SELECT "users".* FROM "users" WHERE "users"."email" = 'drew.j.wyatt@gmail.com' LIMIT 1
 => #<User id: 1, first_name: "Drew", last_name: "Wyatt", email: "drew.j.wyatt@gmail.com", password_digest: "$2a$10$gPW4PHLZgT5o2OqTlLJt0ObsdfFlnDKxSAuYHIOntaPx...", created_at: "2014-05-03 02:24:26", updated_at: "2014-06-23 01:06:20">
2.0.0p247 :002 > u.password_digest
 => "$2a$10$gPW4PHLZgT5o2OqTlLJt0ObsdfFlnDKxSAuYHIOntaPxDZSxIQrC6" 
class User < ActiveRecord::Base
  validates :email, presence: true, uniqueness: true
  validates :first_name, :last_name, :phone, :address, :city, :state, :zip, presence: :true
  validates_with UserValidator

  has_secure_password
  has_many :orders

  has_many :commissions, class_name: Order, foreign_key: :distributor_id

  belongs_to :distributor_level
  belongs_to :referred_by, class_name: User
end