توليد مستخدم جديد برمجيا (مصادقة المنطق)
-
05-07-2019 - |
سؤال
وأنا جديدة تماما لروبي على القضبان لذا يرجى أن تتحملوني:)
وأنا تجهيز ملف بتنسيق csv المستوردة في القضبان وأريد أن إنشاء مستخدمين جدد برمجيا (أنا باستخدام AuthLogic جوهرة جنبا إلى جنب مع متطلبات دور)، وحتى الآن أنا باستخدام:
مثال لاين:
<اقتباس فقرة>Steve.Jobs@apple.com, Steve, Jobs, 555-APPLE
اقتباس فقرة>
والرمز:
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
والمشكلة هي أن هذا لا إضافة مستخدم جديد، فإنه يحاول ولكن فشل (DB بيغن تليها الاستعادة)، وأفترض أنني لست ملء جميع الحقول، مثل تسجيل الدخول وكلمة السر الخ
هل يجب أن تولد صراحة قيم هذه الحقول؟
المحلول 2
وطيب حتى لقد تمكنت من الإجابة على سؤالي الخاصة، وإن لم يكن في الأكثر مثالية من الطرق:
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
نصائح أخرى
وجئت عبر نفس هذه المشكلة أمس. أنا باستخدام الملحق أوث على الرغم من الحقول حتى الدخول / البريد الإلكتروني ليست مطلوبة بالنسبة لي، انها فشلت في استمرار رمز لعدم الحضور التي حصلت حول بإضافة
user.reset_persistence_token
وفقط قبل استدعاء user.save
وعلى أمل أن يساعد قليلا. سيكون من الرائع أن نجد طريقة أنظف للقيام بذلك.