Rancang - Bagaimana cara melarang pengguna tertentu masuk?

105

Saya menggunakan Devise untuk otentikasi dalam aplikasi saya.

Bagaimana cara melarang pengguna tertentu masuk - semacam menonaktifkan pengguna?

Dimitar Vouldjeff
sumber
42
Ini adalah pertanyaan yang valid dan harus dibuka kembali - OP menanyakan "Bagaimana cara melarang pengguna tertentu masuk" menggunakan devise .
Zabba

Jawaban:

149

Lakukan seperti ini:

Buat kolom is_activeuntuk Usermodel.

Kemudian tambahkan kode di bawah ini ke Usermodel:

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

MEMPERBARUI

Seperti yang dicatat Matt Huggins, metode ini sekarang disebut active_for_authentication?( Dokumentasi )

Zabba
sumber
21
Sepertinya ini telah diubah namanya, active_for_authentication?bukan hanya active?.
Matt Huggins
1
the method is now called active_for_authentication?berarti nama metode Anda seharusnya active_for_authentication?bukan active?.
fotanus
Catatan penting: active_for_authentication?harus menjadi metode publik!
Mladen Jablanović
super and self.is_active?dapat disederhanakan menjadisuper && is_active?
David
17

Tambahkan kolom ke Usermodel:allowed_to_log_in .

Kemudian tambahkan ini ke /app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

Jika Anda ingin memberi tahu pengguna dengan pesan khusus, Anda juga dapat menambahkan ini:

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

Saya pikir itu cukup penting karena pesan standar dari Devise mengatakan:

"Akun Anda belum diaktifkan."

Hal itu membingungkan bagi pengguna dan alasan sebenarnya adalah Anda telah "melarang" mereka masuk.

Oyvkva
sumber
Saya menerapkan fitur penangguhan pengguna yang berfungsi, namun inactive_message "Akun Anda saat ini ditangguhkan" juga ditampilkan untuk pendaftaran pengguna saat ini. Dapatkah saya memiliki pesan tidak aktif yang berbeda untuk aktivasi akun baru dan penangguhan pengguna?
Dercni
Terima kasih atas komentar inactive_message.
Chris Farmer
0

Anda ingin melakukan otorisasi, bukan otentikasi. Devise hanya melakukan authetication.
Ie devise hanya memberi tahu Anda bahwa pengguna adalah yang dia katakan.
Anda membutuhkan sesuatu yang lain untuk melarang dia menggunakan situs ini.

Otorisasi adalah topik yang populer dan ada daftar lengkap permata yang dapat membantu Anda:
http://ruby-toolbox.com/categories/rails_authorization.html
Silakan pilih.

x10
sumber
6
Saya tahu perbedaannya. Masalahnya adalah saya ingin melarang pengguna untuk masuk, tidak mengakses pengontrol tertentu.
Dimitar Vouldjeff