Autenticazione

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]

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 P.
[email protected]

ottimi tutorial da cui partire

Devise ottimo, ma bisogna capirlo per non rimanere bruciati :slight_smile:

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

Giovanni

Giustissimo l’appunto sul “capire” Devise, il mio invito era ad usare
qualcosa di pre-costruito e non reinventare la ruota.

Luca P.
[email protected]

On 09/20/2013 03:54 PM, GMGP wrote:

ottimi tutorial da cui partire

Ruby on Rails Screencasts - RailsCasts

Devise ottimo, ma bisogna capirlo per non rimanere bruciati :slight_smile:

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]

On 09/20/2013 03:14 PM, Luca P. 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]

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…

  1. 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]

La colpa in questo caso per tre quarti di Rails 4, dove alcune cose
sono state onestamente cacciate dentro a forza, almeno IMHO.

Luca P.
[email protected]

Il giorno 22/set/2013, alle ore 20:51, FleX [email protected] 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:

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 :stuck_out_tongue:

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 :slight_smile:

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 :stuck_out_tongue: 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:

un po’ pi a basso livello, ma ti offre la possibilit di customizzare
senza sbatterci troppo la testa :slight_smile:

ciao,
A.


http://andreapavoni.com

On 09/22/2013 09:20 PM, Luca P. 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]

On 09/23/2013 10:07 AM, Andrea P. 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 :stuck_out_tongue:

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 :slight_smile:


FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765 E2A5 88B7 4C5C 98AA 9D3E]