ডিভাইসে কোনও ব্যবহারকারীর পাসওয়ার্ড কীভাবে যাচাই করবেন


97

রেলগুলিতে ছদ্মবেশী রত্ন ব্যবহার করে ব্যবহারকারীর পাসওয়ার্ড মেলে আমার সমস্যা হচ্ছে। ইউজার পাসওয়ার্ড আমার ডিবিতে সংরক্ষিত যা এনক্রিপ্টড_প্যাসওয়ার্ড এবং আমি পাসওয়ার্ড দিয়ে ব্যবহারকারীকে খুঁজতে চেষ্টা করছি, তবে কীভাবে আমার ডিবিতে ফর্ম এবং এনক্রিপ্টড_প্যাসওয়ার্ড থেকে পাসওয়ার্ড মেলে তা আমি বুঝতে পারি না।

User.find_by_email_and_password(params[:user][:email], params[:user][:password])

4
আমি মনে করি সঠিক উত্তর দেওয়া হয়েছে। আপনি এটি নির্বাচন করতে পারেন?
— ব্রেন্ডন মইর

উত্তর:


270

আমি মনে করি এটি করার একটি ভাল এবং আরও মার্জিত উপায়:

user = User.find_by_email(params[:user][:email])
user.valid_password?(params[:user][:password])

আপনি যে পদ্ধতিটি ব্যবহারকারীর উদাহরণ থেকে ডাইজেস্ট তৈরি করেন তা হ'ল আমাকে সুরক্ষিত পদ্ধতির ত্রুটি দিচ্ছে।


4
পাসওয়ার্ড ডাইজেস্ট সুরক্ষিত, আপনি এটি প্রায় এইভাবে পেতে পারেন। User.new.send (: পাসওয়ার্ড_ডিজ্ট, 'পাসওয়ার্ড')
— মার্ক সোয়ার্ডস্ট্রম

তবে এটি ব্যবহারকারীর পাসওয়ার্ডটি কিছু প্রসঙ্গে অনুমান করাতে পারে যে কীভাবে পাসওয়ার্ড চেক করা যায় এবং তবুও থ্রোটলিং সুরক্ষা থেকে কীভাবে উপকৃত হয়?
— সিমো

21

ডিভাইস পদ্ধতি ব্যবহার করুন

ডিভাইস আপনাকে ব্যবহারকারীর পাসওয়ার্ড যাচাই করার জন্য অন্তর্নির্মিত পদ্ধতিগুলি সরবরাহ করে :

user = User.find_for_authentication(email: params[:user][:email])

user.valid_password?(params[:user][:password])

জন্য স্ট্রং প্যারাম সঙ্গে পাগল 4+ , আপনি ভালো কিছু করতে পারেন:

def login
  user = User.find_for_authentication(email: login_params[:email])

  if user.valid_password?(login_params[:password])
    user.remember_me = login_params[:remember_me]
    sign_in_and_redirect(user, event: :authentication)
  end
end

private
def login_params
  params.require(:user).permit(:email, :password, :remember_me)
end

আমার প্রকল্পের জন্য কাজ করে। ধন্যবাদ
— zmd94

6

আমি মনে করি এটি আরও ভাল হবে

valid_password = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password])

4
এটি ব্যবহারকারীর একটি বুলিয়ান মান সেট করে (পাসওয়ার্ডটি বৈধ ছিল কি না)।
— রায়ান টেলর

0

আমি এই পরামর্শ দিতে হবে।

user = User.where("email=? OR username=?", email_or_username, email_or_username).first.valid_password?(user_password)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.