希望小照片还可以!
您可以看到更新无效。这是模型,也许你可以告诉我它为什么不起作用。
session.rb
module CWB
class Session < CWB::Resource
def self.authenticate(name, password)
account = CWB::Account.find_by_name(name)
account if BCrypt::Password.new(account.password_hash) == password
end
def self.reset_auth_token(session_token)
account = CWB::Account.find_by_token(session_token)
new_token = SecureRandom.hex
binding.pry
account.update_attribute(:token, new_token)
end
end
end
account.rb
require 'bcrypt'
module CWB
class Account < ActiveRecord::Base
include BCrypt
attr_accessor :password
validates_presence_of :name, :email, :password, on: :create
before_save :encrypt_password
before_create :set_auth_token
private
def set_auth_token
return if token.present?
begin
self.token = SecureRandom.hex
end while self.class.exists?(token: token)
end
def encrypt_password
return false unless password.present?
self.password_hash = BCrypt::Password.create(password)
end
end
end
答案 0 :(得分:2)
encrypt_password
模型上的CWB::Account
回调返回false并回滚保存。这是因为您没有将任何内容传递到password
属性,因此password.present?
为false。
如果没有提供密码,您应该只返回true,这样只有在您输入密码时才进行加密和密码更新。