# Dati dal form

**URL:** <https://www.ruby-forum.com/t/dati-dal-form/120863>\
**Category:** IT\
**Created:** [November 21, 2007, 8:26am UTC](https://www.ruby-forum.com/t/dati-dal-form/120863 "2007-11-21T08:26:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![giuseppefava](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/65b543/32.png) [@giuseppefava](https://www.ruby-forum.com/u/giuseppefava)\
**Post date:** [November 21, 2007, 8:26am UTC](https://www.ruby-forum.com/t/dati-dal-form/120863/1 "2007-11-21T08:26:53Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![giuseppefava](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/65b543/32.png) [@giuseppefava](https://www.ruby-forum.com/u/giuseppefava)\
**Post date:** [November 21, 2007, 10:42am UTC](https://www.ruby-forum.com/t/dati-dal-form/120863/2 "2007-11-21T10:42:27Z")

</div>

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](http://api.rubyonrails.com/classes/ActiveRecord/Validations/ClassMethods.html#M000952)

---

<div class="post-metadata">

**Author:** ![giuseppefava](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/65b543/32.png) [@giuseppefava](https://www.ruby-forum.com/u/giuseppefava)\
**Post date:** [November 21, 2007, 11:32am UTC](https://www.ruby-forum.com/t/dati-dal-form/120863/3 "2007-11-21T11:32:40Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![giuseppefava](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/65b543/32.png) [@giuseppefava](https://www.ruby-forum.com/u/giuseppefava)\
**Post date:** [November 21, 2007, 11:59am UTC](https://www.ruby-forum.com/t/dati-dal-form/120863/4 "2007-11-21T11:59:17Z")

</div>

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.
