Saya menggunakan Devise untuk otentikasi dalam aplikasi saya.
Bagaimana cara melarang pengguna tertentu masuk - semacam menonaktifkan pengguna?
Saya menggunakan Devise untuk otentikasi dalam aplikasi saya.
Bagaimana cara melarang pengguna tertentu masuk - semacam menonaktifkan pengguna?
Jawaban:
Lakukan seperti ini:
Buat kolom is_active
untuk User
model.
Kemudian tambahkan kode di bawah ini ke User
model:
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 )
active_for_authentication?
bukan hanya active?
.
the method is now called active_for_authentication?
berarti nama metode Anda seharusnya active_for_authentication?
bukan active?
.
active_for_authentication?
harus menjadi metode publik!
super and self.is_active?
dapat disederhanakan menjadisuper && is_active?
Tambahkan kolom ke User
model: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.
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.
Sepertinya Anda tertarik dengan cancan