के साथ अच्छी तरह से काम करने के लिए मैं रेल 3 से 3.1 तक एक प्रोजेक्ट पोर्ट कर रहा हूं। मेरा प्रमाणीकरण सिस्टम आसानी से ActiveRecord में नए has_secure_password पर स्विच किया गया था। एकमात्र समस्या जो मैं चल रहा हूं वह यह है कि मैं ओमनीएथ का भी उपयोग करता हूं और मेरे पास सिस्टम सेट अप है, इसलिए यदि उपयोगकर्ता ओमनीएथ प्रदाताओं में से किसी एक का उपयोग करके साइन अप करता है तो खाते को पासवर्ड की आवश्यकता नहीं होती है। मैं has_secure_password द्वारा password_digest सत्यापन सेटअप को ओवरराइड नहीं कर सकता। क्या वैसे भी उन मान्यताओं को बंद करने और अपना खुद का लिखने के लिए वैसे भी है, या क्या मुझे साइट के अपने रेल 3 संस्करण से अपने पुराने हाथ लिखित बीक्रिप्ट फ़ंक्शंस का उपयोग करना होगा?रेलवे प्राप्त करना 3.1 है has_secure_password OmniAuth
उत्तर
मैं कस्टम तरीकों का उपयोग करने के लिए वापस जाने के लिए समाप्त हो गया। हालांकि, मुझे बाद में एहसास हुआ कि मुझे शर्तों की जांच करने के लिए पहले_विधीकरण कॉलबैक का उपयोग करने में सक्षम होना चाहिए था, फिर यदि वे मेल खाते हैं तो '0' जैसी सरल चीज़ को पासवर्ड_डिजिस्ट सेट करें। इस तरह पाचन कभी खाली नहीं होगा, लेकिन साथ ही इसे कभी भी सही पासवर्ड के रूप में मान्य नहीं करना चाहिए, जिससे उन्हें OmniAuth के माध्यम से साइन इन किया जा सके।
अगर मुझे गलत लगता है तो मुझे सही करने के लिए स्वतंत्र महसूस करें।
स्कॉट, आपका विचार सही है। मैं इस समस्या के साथ कुश्ती नहीं कर रहा हूं। मैंने 'has_secure_password' को ओवरराइड करने का प्रयास किया और यह बस काम नहीं करेगा। कोई फर्क नहीं पड़ता कि मैं कोड कहाँ अटक गया।
class User < ActiveRecord::Base
has_secure_password
validates_presence_of :password, :on => :create, :if => :password_required
# Associations
has_many :authentications
# Callbacks
before_validation :no_password_omniauth
# Gets set to true if the caller is trying to authenticate with omniauth.
@called_omniauth = false
# Build new omniauth users
def apply_omniauth(omniauth)
authentications.build(
:provider => omniauth['provider'],
:uid => omniauth['uid'])
self.first_name = omniauth['user_info']['first_name'] if self.first_name.blank?
self.last_name = omniauth['user_info']['last_name'] if self.last_name.blank?
self.email = omniauth['user_info']['email'] if omniauth['user_info']['email'] && self.email.blank?
@called_omniauth = true
end
def password_required
return false if @called_omniauth == true
(authentications.empty? || !password.blank?)
end
private
def no_password_omniauth
self.password_digest = 0 unless password_required
end
end
apply_omniauth विधि नियंत्रक से कहा जाता हो जाता है जब किसी को प्रमाणित या साइन अप करने के प्रयास कर रहा है:
इसके बजाय मैं निम्नलिखित है।
इस विचार के लिए धन्यवाद कि आपने इसे खींचा है।
मैंने आपके उत्तर को स्विच कर दिया क्योंकि आपने कोड उदाहरण प्रदान किया था। धन्यवाद। मुझे लगता है कि यह किसी भी प्रकार के पासवर्ड का उपयोग करके उस खाते में लॉग इन नहीं करेगा? –
इसके अलावा, आप वास्तव में '@ called_omniauth' का उपयोग कर क्या कर रहे हैं? सिर्फ 'प्रमाणीकरण.empty का उपयोग नहीं करेंगे? || ! password_blank? 'आपकी' password_required' विधि में पर्याप्त है? –
call_omniauth एकमात्र तरीका है कि आपका एप्लिकेशन जानता है कि उपयोगकर्ता omniauth (apply_omniauth विधि द्वारा) के माध्यम से साइन अप कर रहा है। – chourobin
- 1. रेल 3.1 Mongoid has_secure_password
- 2. रेलवे 3.1 पीडीएफकिट
- 3. रेल में Omniauth 3.1.rc4
- 4. रेलवे में Google को Omniauth के लिए कॉन्फ़िगरेशन सेटिंग्स
- 5. OmniAuth और openid: ओपनिड प्रदाता से कुछ फ़ील्ड प्राप्त करना
- 6. OmniAuth
- 7. रेलवे में कम उपयोग कैसे करें 3.1 आवेदन?
- 8. has_secure_password मान्यताओं को कैसे छोड़ें
- 9. OmniAuth
- 10. रेलवे को तैनात करने के लिए कैसे करें (सिंक) रेलवे 3.1 अमेज़ॅन एस 3
- 11. रेलवे में संकलन और लोड करने के लिए सीकेडिटर संसाधन कैसे प्राप्त करें 3.1 संपत्ति पाइपलाइन
- 12. रेलवे पर रूबी में होस्टनाम या आईपी प्राप्त करना
- 13. रेलवे को कैसे रोकें 3.1 लेनदेन में चलने से माइग्रेशन?
- 14. लोग रेलवे का परीक्षण कैसे कर रहे हैं 3.1 + force_ssl?
- 15. रेलवे 3.1 में इस महीने बनाए गए रिकॉर्ड कैसे खोजें?
- 16. रेल स्थापित करना 3.1
- 17. रेलवे
- 18. एक एम्बेडेड ग्लासफ़िश से संदर्भ प्राप्त करना 3.1
- 19. रेल 3.1 में काम करने के लिए फ़ॉन्ट प्राप्त करना?
- 20. फेसबुक omniauth कॉलबैक और #_
- 21. रेलवे
- 22. रेलवे
- 23. कैसे है: रेलवे में परिसंपत्ति समूह 3.1 बंडलर द्वारा संभाला जाता है?
- 24. रेलवे
- 25. Omniauth- facebook रद्द करें बटन
- 26. रेलों में नमक कैसे काम करता है has_secure_password
- 27. रेलवे
- 28. रेलवे
- 29. Omniauth के लिए एक नई रणनीति तैयार करना, लेकिन Omniauth इसे
- 30. रेल पाइपलाइन ने रेलवे 3.1 में स्थानीयहोस्ट को धीमा क्यों किया है
मैं आपकी विधि का प्रयास करने जा रहा हूं, अगर आपको बेहतर तरीका मिल जाए तो मुझे बताएं। –
यह आसान फिक्स की तरह लगता है। मैंने बस 'user.password_digest = SecureRandom.urlsafe_base64' को' '__nniauth' विधि में सेट किया है। (हालांकि, आपके उत्तर को दोबारा पढ़ने के बाद, मुझे लगता है कि इसे यादृच्छिक नहीं किया जाना चाहिए क्योंकि इसका प्रमाणीकरण के लिए उपयोग नहीं किया जा रहा है?)। यह देखते हुए यह बहुत तेज़ है - मुझे आश्चर्य है कि स्वीकार किए गए उत्तर का चयन करने के लिए तर्क क्या है? – umezo
आप सही हैं। मैं आगे बढ़ गया और जवाब बदल दिया। हालांकि मैंने अभी भी सीधे बीसीआरपीटी का उपयोग करने और अपना पासवर्ड हैशिंग विधियों को लिखने का विकल्प चुना है। ऐसा करना बहुत आसान है और आपके इरादे स्पष्ट करता है। –