सबसे अच्छा तरीका वसीयत रास्ता में यह करने के लिए है:।
नीचे मानता है कि आप और database_authenticable मॉड्यूल वसीयत का उपयोग कर रहे अपने आवेदन के उपयोगकर्ताओं मॉडल नाम उपयोगकर्ता
1. खाता_active लागू करें? विधि।
उपयोगकर्ता तालिका में बूलियन account_active
कॉलम जोड़ें या उपयोगकर्ता मॉडल में account_active?
विधि को परिभाषित करें (आप अपना स्वयं का विधि नाम चुन सकते हैं)। उदाहरण के लिए:
# app/models/user.rb
def account_active?
blocked_at.nil?
end
2. अपने मॉडल (उपयोगकर्ता) में active_for_authentication?
विधि ओवरराइट करें।
# app/models/user.rb
def active_for_authentication?
super && account_active?
end
3. जोड़ें विधि है जो फ्लैश संदेश के लिए अनुवाद देता है।
जब भी active_for_authentication?
झूठा रिटर्न देता है, तो देवसे inactive_message
विधि का उपयोग कर आपका मॉडल निष्क्रिय क्यों है, इस कारण से पूछता है।
# app/models/user.rb
def inactive_message
account_active? ? super : :locked
end
और यही वह है। आपको sign_out
या redirect_to
उपयोगकर्ता की देखभाल करने की आवश्यकता नहीं है।
इसके अलावा, उपयोगकर्ता तुरंत बंद कर दिया जाता है, अगले अनुरोध के साथ, अगले साइन इन करने के बाद नहीं
अधिक:। devise/authenticatable.rb।
ध्यान दें कि इसमें कमजोरी है: यदि उपयोगकर्ता पहले से लॉग इन होने पर प्रतिबंधित है, तो प्रतिबंध तब तक प्रभावी नहीं होगा जब तक कि वे साइन आउट न करें और फिर से साइन इन न करें (जो लंबे समय तक हो सकता है।) तो या तो बल जब आप उन्हें प्रतिबंधित करते हैं, उस समय लॉग आउट करने के लिए उपयोगकर्ता, या इस तर्क को 'after_sign_in_path_for'' के बजाय अपने नियंत्रकों में 'pre_action' पर ले जाएं। – GMA
जब आप उपयोगकर्ता को प्रतिबंधित करते हैं, तो उसे – enter08