Forum: Italian Ruby user group Autenticazione

0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-09-20 15:12
(Received via mailing list)
Ciao a tutti,

mi sto cimentando nella mia prima applicaione RoR e, devo implementare
il meccanismo di autenticazione via web.
Faccio tutto a manina o conviene utilizzare qualche gemma tipo clearance
?
Seconda domanda: nel mio DB ho gia' una tabella utenti con svariati
campi (nome, cognome, indirizzo, email, photo_url, etc...): conviene
aggiungere il campo password ed i relativi campi ultimo login e ultimo
cambio pwd alla stessa tabella o crearne una nuova e relazionarla ?

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
5ffafe70176a99f175d16192fd5be69e?d=identicon&s=25 Luca P. (luca_p)
on 2013-09-20 15:15
(Received via mailing list)
2 al prezzo di uno: usa Devise, che praticamente  lo standard e ti
consente di passare meno tempo sull'auth e pi tempo sulla tua app, e
aggiungi pure i campi alla tabella User.

Occhio solo che con Devise non sono solo 2, magari genera un model
"parallelo" e guarda cosa c', oppure da qualche parte un tutorial ci
sar.

--
Luca Pradovera
luca.pradovera@gmail.com
217fa9b23f7dc0016b64fb0edc89382d?d=identicon&s=25 Giovanni Messina (gmgp)
on 2013-09-20 15:54
(Received via mailing list)
ottimi tutorial da cui partire

http://railscasts.com/episodes?utf8=%E2%9C%93&sear...

Devise ottimo, ma bisogna capirlo per non rimanere bruciati :-)

per quanto riguarda i campi alla tabella va benissimo aggiungerli ma
guradati i tutorial che o spiegano ottimamente

Giovanni
5ffafe70176a99f175d16192fd5be69e?d=identicon&s=25 Luca P. (luca_p)
on 2013-09-20 15:56
(Received via mailing list)
Giustissimo l'appunto sul "capire" Devise, il mio invito era ad usare
qualcosa di pre-costruito e non reinventare la ruota.
--
Luca Pradovera
luca.pradovera@gmail.com
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-09-21 02:08
(Received via mailing list)
On 09/20/2013 03:54 PM, GMGP wrote:
> ottimi tutorial da cui partire
>
> http://railscasts.com/episodes?utf8=%E2%9C%93&sear...
>
> Devise ottimo, ma bisogna capirlo per non rimanere bruciati :-)

Grande Railcasts: non lo conoscevo !!!
Ho iniziato a divorare i tutorial gratuiti, anche se non ho capito la
differenza con le versioni "revised" a pagamento.

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-09-21 02:11
(Received via mailing list)
On 09/20/2013 03:14 PM, Luca Pradovera wrote:
> 2 al prezzo di uno: usa Devise, che praticamente  lo standard e ti consente di
passare meno tempo sull'auth e pi tempo sulla tua app, e aggiungi pure i campi
alla tabella User.
>

credo che optero' su Devise, mi piacerebbe scrivere la parte di
autenticazione, ma sono sicuro che una soluzione testata come Devise sia
piu' sicura.

--
FleX
Success is the maximum utilization of the ability that you have
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-09-22 20:51
(Received via mailing list)
malgrado abbia trovato svariati tutorial, sto avendo dei problemi con
Devise.
Premesso che non sono riuscito ad integrarlo con la mia tabella users
pre-esistente dopo svariati tentativi, ho deciso di iniziare da zero; e
alla fine, sono riuscito ad replicare lo scenario standard di
autenticazione tramite email.
Il secondo step consisteva nell'aggiungere il campo username e permette
l'autenticazione tramite email o username e qui' , malgrato il tutorial,
cominciano i problemi con gli Strong Parameters in Rails 4.
Posto che non ho capito che bisogno c'era di mettere di default un
hardening cosi' spinto, non sono riuscito a dire a rails di avere
"accesso" al campo username ed email.
Soluzioni trovate/provate:

1) fare delle modifiche all'application controller leggendo la doc
devise ho aggiunto quanto segue all'application controller

class ApplicationController < ActionController::Base


protect_from_forgery with: :exception
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
defconfigure_permitted_parameters
 #devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username,
:email) }
devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username,
:email)}
#devise_parameter_sanitizer.for(:account_update) { |u|
u.permit(:username, :email) }
end

Purtroppo funziona solo la linea decommentata...

2) creare e mettere del codice nei controller di Devise (che di default
non sono stati creati dal mio scaffold.

Purtroppo ho fallito in entrambe le modalita': non esiste un modo piu'
semplice per avere accesso alle variabili ?

Mi rendo conto di essere Newbie di RoR, ma sinceramente non mi sta
sembrando cosi' veloce e produttivo come descritto. Queste ore spese
sono state sicuramente formative, ma sono dovuto scendere troppo a basso
livello considerando che dovevo solo usare una gemma con qualche piccola
customizzazione.

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
5ffafe70176a99f175d16192fd5be69e?d=identicon&s=25 Luca P. (luca_p)
on 2013-09-23 08:18
(Received via mailing list)
La colpa in questo caso  per tre quarti di Rails 4, dove alcune cose
sono state onestamente cacciate dentro a forza, almeno IMHO.
--
Luca Pradovera
luca.pradovera@gmail.com
Eda3d93f49a394d603bd5ecd7c821269?d=identicon&s=25 Andrea Pavoni (apeacox)
on 2013-09-23 10:07
(Received via mailing list)
Il giorno 22/set/2013, alle ore 20:51, FleX <flex@programmareweb.com> ha
scritto:

> Premesso che non sono riuscito ad integrarlo con la mia tabella users
> pre-esistente dopo svariati tentativi, ho deciso di iniziare da zero; e
> alla fine, sono riuscito ad replicare lo scenario standard di
> autenticazione tramite email.

ci sono due modi:

* rispettare le stesse colonne della tabella sul db richiesta da Devise

* rimappare i nomi delle colonne che hai, con quelle richieste da Devise

class User < ActiveRecord::Base
  set_table_name "mieUtenti"

  alias_attribute :email, :nomeVecchio
  ...
end


> Il secondo step consisteva nell'aggiungere il campo username e permette
> l'autenticazione tramite email o username e qui' , malgrato il tutorial,
> cominciano i problemi con gli Strong Parameters in Rails 4.

diciamo, a prescindere, che Devise comporta non pochi problemi ogni
volta che devi modificare il suo comportamento di default.
l'unica cosa che puoi fare  googlare o armarti di pazienza per studiare
il codice della gemma e muoverti di conseguenza.

ovviamente, nel tuo caso sei quasi costretto al primo approccio. ma il
secondo ti darebbe qualche possibilit di imparare alcuni argomenti
avanzati di Ruby/Rails.
nello specifico, prova a dare un'occhiata qui:

http://stackoverflow.com/questions/18026594/rails-...


> Posto che non ho capito che bisogno c'era di mettere di default un
> hardening cosi' spinto, non sono riuscito a dire a rails di avere
> "accesso" al campo username ed email.

incollo dal README di StrongParameters:

"With this plugin Action Controller parameters are forbidden to be used
in Active Model mass assignments until they have been whitelisted. This
means you'll have to make a conscious choice about which attributes to
allow for mass updating and thus prevent accidentally exposing that
which shouldn't be exposed."

> Purtroppo funziona solo la linea decommentata
dovresti decommentarle tutte e 3. come puoi notare, sono 3 azioni
differenti:

* registri un utente (sign_up)

* autenticare (sign_in)

* aggiornare i dati esistenti (account_update)

 ovvio che abbia funzionato una sola, ma dipende anche da *quale*
casistica stavi provando :P


> Mi rendo conto di essere Newbie di RoR, ma sinceramente non mi sta
> sembrando cosi' veloce e produttivo come descritto.

non so con quale linguaggio/tecnologia programmavi prima, per *ti sfido*
(in senso metaforico :P) a riprodurre le stesse funzionalit di Devise
(registrazione, autenticazione, aggiornamento dati utente per lasciarlo
semplice) con quello che usavi prima. mi raccomando, non dimenticare di
aggiungere anche i tests ed un layer per il database in grado di
interfacciarsi con mysql, postgresql, sqlite e mongodb :-)

battute a parte, sia chiaro, quelli che mi conoscono qui in lista mi
hanno sentito SEMPRE parlare male di Devise, tuttavia a volte lo uso per
comodit, sapendo che in caso di problemi (e ce ne sono!), trovo sempre
un modo di risolverli per conto mio.

purtroppo, nel tuo caso, essere un neofita && usare l'ultima maior
release di RoR && cercare di applicare alcuni edge-cases (tabelle db
legacy, comportamento custom per Devise) non ti hanno affatto aiutato.
forse, se vuoi imparare, ti conviene prima fare qualcosa di pi standard
(db da zero, autenticazione di default, etc)


> Queste ore spese
> sono state sicuramente formative, ma sono dovuto scendere troppo a basso
> livello considerando che dovevo solo usare una gemma con qualche piccola
> customizzazione.

beh, IMHO  una questione di filosofia :P le gemme servono a non
reinventare la ruota,  comodo usarle, ma per esperienza so che prima di
adottarne una,  sempre meglio sapere come funzionano *a basso livello*,
giusto per non avere sorprese dopo. again, nel tuo caso hai scelto una
gemma che, pur con molti difetti,  molto complessa. giusto per rendere
l'idea, ecco una parte dei suoi compiti:

* gestire in modo trasparente gli utenti su db, indipendentemente dal
nome del modello/tabella (quindi, avresti potuto avere MaleUser,
FemaleUser, Admin, Editor, etc)

* generare le views con tutte le forms del caso

* autenticare, registrare ed aggiornare i dati utente. sorvolando sulle
altre features tipo: conferma, recupero password, etc...

prova ad usare Sorcery:

https://github.com/NoamB/sorcery

 un po' pi a basso livello, ma ti offre la possibilit di customizzare
senza sbatterci troppo la testa :-)

ciao,
A.

--
http://andreapavoni.com
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-09-23 18:49
(Received via mailing list)
On 09/22/2013 09:20 PM, Luca Pradovera wrote:
> La colpa in questo caso  per tre quarti di Rails 4, dove alcune cose sono state
onestamente cacciate dentro a forza, almeno IMHO.

Probabilmente optero' per il downgrade, ma si tratta solo di un
workaround, prima o poi dovro' passare alla 4

--
FleX
Success is the maximum utilization of the ability that you have
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-09-24 01:31
(Received via mailing list)
On 09/23/2013 10:07 AM, Andrea Pavoni wrote:
> * rimappare i nomi delle colonne che hai, con quelle richieste da Devise
>
> class User < ActiveRecord::Base
>   set_table_name "mieUtenti"
>
>   alias_attribute :email, :nomeVecchio
>   ...
> end

Questa mi sembra ottima, ma sara' per la prossima volta


> diciamo, a prescindere, che Devise comporta non pochi problemi ogni volta che
devi modificare il suo comportamento di default.
> l'unica cosa che puoi fare  googlare o armarti di pazienza per studiare il
codice della gemma e muoverti di conseguenza.

lo sto facendo e non mollo.
Grazie anche al tuo link il problema sembra risolto !!!


> dovresti decommentarle tutte e 3. come puoi notare, sono 3 azioni differenti:
>
> * registri un utente (sign_up)
>
> * autenticare (sign_in)
>
> * aggiornare i dati esistenti (account_update)
>
>  ovvio che abbia funzionato una sola, ma dipende anche da *quale* casistica
stavi provando :P

avevo messo erroneamente gli stessi campi nei diversi scenari oltre ad
aver fatto confusione con i moduli devise nel modello. Questo codice
sembra funzionare :

def configure_permitted_parameters
 devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username,
:email) }
 devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username,
:email, :remember_me) }
  devise_parameter_sanitizer.for(:account_update) { |u|
u.permit(:username, :email, :password, :password_confirmation,
end


> non so con quale linguaggio/tecnologia programmavi prima, per *ti sfido* (in
senso metaforico :P)

Sono un ex sviluppatore Java: ho perso la sfida :-)

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.