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


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.