Dati dal form

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.