डेविस में उपयोगकर्ता के पासवर्ड को कैसे सत्यापित करें


96

मुझे रेल में डेवीस मणि का उपयोग करके उपयोगकर्ता के पासवर्ड से मेल खाने में समस्या हो रही है। उपयोगकर्ता पासवर्ड मेरे डीबी पर संग्रहीत है जो एन्क्रिप्टेड_पासवर्ड है और मैं पासवर्ड द्वारा उपयोगकर्ता को खोजने की कोशिश कर रहा हूं, लेकिन मुझे समझ नहीं आ रहा है कि मेरे डीबी में फॉर्म और एनक्रिप्टेड_पासवर्ड से पासवर्ड का मिलान कैसे किया जाए।

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

3
मुझे लगता है कि सही उत्तर की पेशकश की गई है। क्या आप इसका चयन कर सकते हैं?
ब्रेंडन मुइर

जवाबों:


269

मुझे लगता है कि यह करने का एक बेहतर और अधिक सुरुचिपूर्ण तरीका है:

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

दूसरी विधि जहाँ आप उपयोगकर्ता के उदाहरण से डाइजेस्ट जनरेट करते हैं, मुझे संरक्षित विधि की त्रुटियाँ दे रहा था।


2
पासवर्ड डाइजेस्ट सुरक्षित है, आप इसे इस तरह से प्राप्त कर सकते हैं। User.new.send (: password_digest, 'पासवर्ड')
मार्क स्वार्डस्ट्रॉम

लेकिन यह कुछ संदर्भ में उपयोगकर्ता के पासवर्ड का अनुमान लगाने के लिए प्रेरित करेगा, पासवर्ड की जांच कैसे करें और अभी भी डेविस थ्रॉटलिंग सुरक्षा से लाभ उठाएं?
simo

19

Devise Methods का प्रयोग करें

उपयोगकर्ता के पासवर्ड को सत्यापित करने के लिए डेविस आपको अंतर्निहित तरीके प्रदान करता है :

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)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.