app/volt/models/user.rb in volt-0.9.4.pre1 vs app/volt/models/user.rb in volt-0.9.4.pre2

- old
+ new

@@ -1,12 +1,9 @@ require 'bcrypt' unless RUBY_PLATFORM == 'opal' module Volt class User < Model - field :username - field :email - field :name field :password # returns login field name depending on config settings def self.login_field if Volt.config.try(:public).try(:auth).try(:use_username) @@ -14,37 +11,43 @@ else :email end end - validate login_field, unique: true, length: 8 - validate :email, email: true - permissions(:read) do # Never pass the hashed_password to the client deny :hashed_password # Deny all if this isn't the owner deny if !id == Volt.current_user_id && !new? end - if RUBY_PLATFORM == 'opal' - validations do - # Only validate password when it has changed - if changed?(:password) - # Don't validate on the server - validate :password, length: 8 - end + unless RUBY_PLATFORM == 'opal' + permissions(:update) do + deny unless id == Volt.current_user_id end end - def password=(val) - if Volt.server? - # on the server, we bcrypt the password and store the result - self._hashed_password = BCrypt::Password.create(val) - else - # Assign the attribute - self._password = val + validations do + # Only validate password when it has changed + if changed?(:password) + # Don't validate on the server + validate :password, length: 8 + end + end + + # On the server, we hash the password and remove it (so we just store the hash) + unless RUBY_PLATFORM == 'opal' + before_save :hash_password + + def hash_password + password = get('password') + + # Clear the password + set('password', nil) + + # Set the hashed_password field instead + set('hashed_password', BCrypt::Password.create(password)) end end end end