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:
ovvio che abbia funzionato una sola, ma dipende anche da quale
casistica stavi provando
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 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
ciao,
A.
–
http://andreapavoni.com