2015-08-24 6 views
9

हमारे आवेदन में हमारे पास सामान्य उपयोगकर्ता हैं। हालांकि, हम कुछ लोगों को आमंत्रित करने के लिए निमंत्रण करने में सक्षम होना चाहते हैं। ध्यान दें कि एक आमंत्रण सीधे उपयोगकर्ता के साथ मिलकर होता है, क्योंकि हम पहले से ही इन उपयोगकर्ताओं के लिए कुछ सेटिंग्स सेट करने में सक्षम होना चाहते हैं। (हम अपने पुराने सॉफ्टवेयर से नए ग्राहकों को कम कर रहे हैं)।डेविस: पासवर्ड के बिना उपयोगकर्ता बनाएं

तो:

  • एक व्यवस्थापक द्वारा नया उपयोगकर्ता बनाने और उसकी सेटिंग परिवर्तित करने में सक्षम होना चाहिए।
  • जब कोई अपने invitation_token के साथ एक लिंक का पालन करता है, तो उन्हें एक फॉर्म देखना चाहिए जहां वे अपने खाते के लिए पासवर्ड सेट कर सकते हैं।

मुझे क्या परेशानी हो रही है, यह है कि सामान्य पासवर्ड सत्यापन को छोड़कर व्यवस्थापक को उपयोगकर्ता खाता बनाने में सक्षम कैसे किया जाए। यदि एक डिफ़ॉल्ट पासवर्ड सेट करने की आवश्यकता होगी, तो यह एक भयानक समाधान होगा, क्योंकि इससे गंभीर सुरक्षा दोष पैदा होगा।

पासवर्ड प्रदान किए बिना डेविस में नया उपयोगकर्ता कैसे बनाएं?

विधि 1::

अधिभार वसीयत के password_required? विधि

class User < ActiveRecord::Base 
    attr_accessor :skip_password_validation # virtual attribute to skip password validation while saving 

    protected 

    def password_required? 
    return false if skip_password_validation 
    super 
    end 
end 

## Saving: 
# 
user.skip_password_validation = true 
user.save 

विधि 2:

अक्षम

+0

आप एक डेटाबेस बाधा त्रुटि दिखाई दे रहा है या अपने नए उपयोगकर्ता रिकॉर्ड सिर्फ 'मान्य नहीं है'? – Josh

उत्तर

30

वहाँ आप क्या चाहते करने के लिए कम से कम दो तरीके हैं validate: false ऑप्टियो के साथ सत्यापन n:

user.save(validate: false) 

यह सभी फ़ील्ड (केवल पासवर्ड ही नहीं) की सत्यापन को छोड़ देगा। इस मामले में आपको यह सुनिश्चित करना चाहिए कि अन्य सभी फ़ील्ड मान्य हैं।

...

लेकिन मैं तुम्हें उपयोगकर्ताओं को अपने विशेष मामले में पासवर्ड के बिना नहीं बनाने के लिए सलाह देते हैं। मैं कुछ अतिरिक्त तालिका बनाउंगा (उदाहरण के लिए: invitations) और उन सभी फ़ील्ड समेत सभी आवश्यक जानकारी संग्रहीत करें जिन्हें आप पुष्टि के बाद किसी उपयोगकर्ता को असाइन करना चाहते हैं।

+1

यह बताने में दिलचस्प होगा कि आप बिना पासवर्ड के उपयोगकर्ताओं को बनाने की सलाह क्यों देते हैं। – Pak

+0

@Pak मैंने सलाह दी है कि इस विशेष स्थिति में पासवर्ड के बिना उपयोगकर्ता न बनाएं। यह आपके डीबी को साफ और सामान्य बनाए रखेगा और आपको डेविस को अनुकूलित करने में समस्याएं होने से रोक देगा। – chumakoff

3

टी एल; डॉ:

user.define_singleton_method(:password_required?) { false } 

फिडल

class MockDeviseUser 
    protected 
    def password_required? 
    true 
    end 
end 

class User < MockDeviseUser 
    def is_password_required? 
    puts password_required? 
    end 
end 

unrequired_password_user = User.new 
unrequired_password_user.define_singleton_method(:password_required?) { false } 
unrequired_password_user.is_password_required? 
regular_user = User.new 
regular_user.is_password_required? 
#false 
#true 
संबंधित मुद्दे