in un form ho :
<%= password_field_tag ‘user[password]’ %>
che fa riferimento al modello “user”
e
<%= password_field_tag ‘password_repeated’ %>
che è un campo del form per controllare la digitazione della password
nel controller devo controllare se le pwd fornite sono diverse:
alla seconda accedo con
params[:password_repeated]
ma la prima???
params[:user[password]] ovviamente non va
class Person < ActiveRecord::Base
validates_confirmation_of :password
end
<%= password_field “person”, “password” %>
<%= password_field “person”, “password_confirmation” %>
Nel controller:
params[:person][:password]
params[:person][:password_confirmation]
http://api.rubyonrails.com/classes/ActiveRecord/Validations/ClassMethods.html#M000952
Luca G. wrote:
class Person < ActiveRecord::Base
validates_confirmation_of :password
end
<%= password_field “person”, “password” %>
<%= password_field “person”, “password_confirmation” %>
Nel controller:
params[:person][:password]
params[:person][:password_confirmation]
in effetti non ho spiegato bene la situazione:
il campo password è “virtuale” e serve per popolare il campo reale
“password_hash”
model:
class User < ActiveRecord::Base
def password=(pass)
self.password_hash = Digest::SHA256.hexdigest(pass)
end
end
avevo pensato di gestire il controllo di validazione delle password, “a
mano” nell’ edit del controller, ma se c’è un modo più “railsway” credo
sia meglio.
il problema è che se faccio un “validates_confirmation_of :password”
fallisce
perchè la lettura di “password” dovrebbe essere una decifratura di
password_hash
Giuseppe Fava ha scritto:
il problema è che se faccio un “validates_confirmation_of :password”
fallisce
perchè la lettura di “password” dovrebbe essere una decifratura di
password_hash
Mi pare tu stia facendo un po’ di confusione: la validazione sulla
confirmation va fatta in fase di iscrizione. Il confronto fra le
password con l’hash è una prerogativa del login.
Più o meno il codice dovrebbe essere questo, non lo provo per ragioni di
tempo.
require ‘digest/sha1’
class Person < ActiveRecord::Base
attr_accessor :password
validates_confirmation_of :password
def before_create
hashed_password = self.class.hash_password(password)
end
class << self
def login(username, password)
self.class.find_by_username_and_hashed_password(username,
hash_password(password))
end
def hash_password(password)
Digest::SHA1.hexdigest(password)
end
end
end
Ciao.