Devise - मैं कुछ उपयोगकर्ताओं को साइन इन करने से कैसे मना करूँ?


105

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

मैं कुछ उपयोगकर्ताओं को साइन इन करने से मना करता हूं - एक उपयोगकर्ता को किस तरह से अक्षम करें?


42
यह एक वैध सवाल है और फिर से खोल दी जाना चाहिए - ओपी पूछ रहा है का उपयोग करते हुए "मैं में हस्ताक्षर किए जाने से कुछ ही उपयोगकर्ताओं को मना है" चिंतन करना
ज़ब्बा

जवाबों:


149

इसको ऐसे करो:

मॉडल के is_activeलिए एक कॉलम बनाएं User

फिर Userमॉडल के नीचे कोड जोड़ें :

class User < ActiveRecord::Base
  #this method is called by devise to check for "active" state of the model
  def active_for_authentication?
    #remember to call the super
    #then put our own check to determine "active" state using 
    #our own "is_active" column
    super and self.is_active?
  end
end

अपडेट करें

मैट हगिन्स नोट के रूप में, विधि अब कहा जाता है active_for_authentication?( प्रलेखन )


21
ऐसा लगता है कि active_for_authentication?सिर्फ के बजाय इसका नाम बदल दिया गया है active?
मैट हगिंस

1
the method is now called active_for_authentication?इसका मतलब है कि आपके विधि का नाम active_for_authentication?इसके बजाय होना चाहिए active?
फॉटेनस


महत्वपूर्ण नोट: active_for_authentication?एक सार्वजनिक तरीका होना चाहिए!
म्लाडेन जाबलानोविक

super and self.is_active?को सरल बनाया जा सकता हैsuper && is_active?
डेविड

17

Userमॉडल में एक कॉलम जोड़ें :allowed_to_log_in :।

फिर इसे इसमें जोड़ें /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

यदि आप एक कस्टम संदेश के साथ उपयोगकर्ता को सूचित करना चाहते हैं तो आप इसे भी जोड़ सकते हैं:

def inactive_message
    "You are not allowed to log in."
end

मुझे लगता है कि यह काफी महत्वपूर्ण है क्योंकि डेविस का मानक संदेश कहता है:

"आपका खाता अभी तक सक्रिय नहीं किया गया है।"

यह उपयोगकर्ताओं के लिए भ्रामक है और असली कारण यह है कि आपने उन्हें लॉग इन करने से "प्रतिबंधित" किया है।


मैं एक उपयोगकर्ता निलंबन सुविधा लागू कर रहा हूं जो हालांकि निष्क्रिय होती है_message "आपका खाता वर्तमान में निलंबित है" अब उपयोगकर्ता के पंजीकरण के लिए भी प्रदर्शित होता है। क्या मुझे नए खाता सक्रियण और उपयोगकर्ता निलंबन के लिए अलग-अलग निष्क्रिय संदेश मिल सकते हैं?
दर्कनी


इस निष्क्रिय_ टिप्पणी के लिए धन्यवाद।
क्रिस फार्मर

0

आप प्रमाणीकरण करना चाहते हैं, प्रमाणीकरण नहीं। डेविस केवल आत्मकेंद्रित करता है, हालांकि।
Ie devise केवल आपको बताता है कि एक उपयोगकर्ता वह है जो वह कहता है कि वह है।
साइट का उपयोग करने से मना करने के लिए आपको कुछ और चाहिए।

प्राधिकरण एक लोकप्रिय विषय है और इसमें रत्नों की एक पूरी सूची है जो आपकी सहायता कर सकते हैं:
http://ruby-toolbox.com/categories/rails_authorization.html
अपना चयन करें।


6
मुझे फर्क पता है। बात यह है कि मैं उपयोगकर्ता को साइनइन करने के लिए मना करना चाहता हूं, कुछ नियंत्रक तक नहीं पहुंचना।
दिमितर वोल्डजेफ

-2

लगता है कि आप कैनकन में रुचि रखते हैं


1
यह पूछे गए प्रश्न का उत्तर नहीं है। ज्यादातर लोग प्राधिकरण और प्रमाणीकरण के बीच अंतर को जानते हैं। सवाल यह था कि आप इसे कैसे बनाते हैं ताकि कोई उपयोगकर्ता लॉगिन न कर सके।
इस्सास्लून
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.