Générer un nouvel utilisateur par programme (Auth Logic)
-
05-07-2019 - |
Question
Je connais assez bien Ruby on Rails, alors merci de bien vouloir supporter:)
Je traite un fichier .csv importé dans Rails et je souhaite créer de nouveaux utilisateurs par programme (j'utilise AuthLogic Gem avec la spécification de rôle). Jusqu'à présent, j'utilise:
Exemple de ligne:
Steve.Jobs@apple.com, Steve, Jobs, 555-APPLE
Code:
def new_user(line)
params = Hash.new
params[:user] = Hash.new
params[:user]["email"] = line[0]
params[:user]["first_name"] = line[1]
params[:user]["last_name"] = line[3]
params[:user]["phone"] = line[4]
user = User.new(params[:user])
user.save
end
Le problème étant que cela n’ajoute pas de nouvel utilisateur, il essaie mais échoue (DB Begin suivi de Rollback), je suppose parce que je ne remplis pas tous les champs, tels que login, mot de passe, etc.
Dois-je générer explicitement des valeurs pour ces champs?
La solution 2
Ok, j'ai donc réussi à répondre à ma propre question, mais pas de la manière la plus idéale:
def new_user(line)
params = Hash.new
params[:user] = Hash.new
params[:user]["email"] = line[0]
params[:user]["first_name"] = line[1]
params[:user]["last_name"] = line[2]
params[:user]["phone"] = line[3]
#generate random password of length 6
password = ActiveSupport::SecureRandom.base64(6)
#generate username by adding first and last name + 3 random characters
username = (line[1] + line[2])
username = username + ActiveSupport::SecureRandom.base64(3)
params[:user]["login"] = username
params[:user]["password"] = password
params[:user]["password_confirmation"] = password
#check to see if user already exists
@existing_user = User.find_by_email(line[0])
if(@existing_user)
#user exists
#do nothing
else
#user is brand new
@new_user = User.new(params[:user])
@new_user.reset_persistence_token
if(@new_user.save)
@new_user = User.find_by_email(line[0])
#user saved successfully
else
#a problem occurred
flash[:errors] = @new_user.errors
end
end
end
Autres conseils
Je suis tombé sur le même problème hier. J'utilise l'addon oauth, donc les identifiants de connexion / e-mail ne sont pas des champs obligatoires pour moi.
user.reset_persistence_token
juste avant d'appeler user.save
J'espère que ça aide un peu. Ce serait bien de trouver une façon plus propre de le faire.