Geliştirme - Belirli kullanıcıların oturum açmasını nasıl yasaklayabilirim?


105

Uygulamamda kimlik doğrulaması için Devise kullanıyorum.

Belirli kullanıcıların oturum açmasını nasıl yasaklayabilirim - bir tür kullanıcıyı devre dışı bırakabilir miyim?


42
Bu geçerli bir sorudur ve yeniden açılmalıdır - OP, devise kullanarak "Belirli kullanıcıların oturum açmasını nasıl yasaklayabilirim" diye soruyor .
Zabba

Yanıtlar:


149

Bunu şöyle yapın:

Model is_activeiçin çağrılan bir sütun oluşturun User.

Ardından aşağıdaki kodu Usermodele ekleyin :

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

GÜNCELLEME

Matt Huggins'in belirttiği gibi, yöntem artık active_for_authentication?( Dokümantasyon ) olarak adlandırılıyor.


21
Görünüşe göre bu active_for_authentication?sadece yerine olarak yeniden adlandırılmış active?.
Matt Huggins

1
the method is now called active_for_authentication?yöntem adınızın active_for_authentication?yerine olması gerektiği anlamına gelir active?.
fotanus


Önemli not: active_for_authentication?halka açık bir yöntem olmalı!
Mladen Jablanović

super and self.is_active?basitleştirilebilirsuper && is_active?
David

17

Bir sütun ekleyin Usermodeli: allowed_to_log_in.

Ardından şunu ekleyin /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

Kullanıcıyı özel bir mesajla bilgilendirmek isterseniz, bunu da ekleyebilirsiniz:

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

Bunun oldukça önemli olduğunu düşünüyorum çünkü Devise'den gelen standart mesaj şöyle diyor:

"Hesabınız henüz aktifleştirilmedi."

Bu, kullanıcılar için kafa karıştırıcı ve gerçek sebep, onların oturum açmalarını "yasaklamış" olmanızdır.


Çalışan bir kullanıcı askıya alma özelliği uyguluyorum ancak artık kullanıcı kayıtları için inactive_message "Hesabınız şu anda askıya alındı" görüntüleniyor. Yeni hesap aktivasyonu ve kullanıcının askıya alınması için farklı aktif olmayan mesajları alabilir miyim?
Dercni


İnactive_message yorumu için teşekkürler.
Chris Farmer

0

Yetkilendirme yapmak istiyorsunuz, kimlik doğrulaması değil. Devise yalnızca kimlik doğrulama yapar.
Yani, sadece size bir kullanıcının söylediği kişi olduğunu söyler.
Siteyi kullanmasını yasaklamak için başka bir şeye ihtiyacınız var.

Yetkilendirme popüler bir konudur ve bu konuda size yardımcı olabilecek bir mücevher listesi vardır:
http://ruby-toolbox.com/categories/rails_authorization.html
Seçimini yap.


6
Farkı biliyorum. Mesele şu ki, kullanıcının belirli bir denetleyiciye erişmesini değil, oturum açmasını yasaklamak istiyorum.
Dimitar Vouldjeff

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.