Tôi đang sử dụng Devise để xác thực trong ứng dụng của mình.
Làm cách nào để cấm một số người dùng nhất định đăng nhập - loại vô hiệu hóa một người dùng?
Tôi đang sử dụng Devise để xác thực trong ứng dụng của mình.
Làm cách nào để cấm một số người dùng nhất định đăng nhập - loại vô hiệu hóa một người dùng?
Câu trả lời:
Làm như thế này:
Tạo một cột được gọi is_active
cho User
mô hình.
Sau đó thêm mã bên dưới vào User
mô hình:
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
CẬP NHẬT
Như Matt Huggins lưu ý, phương pháp hiện được gọi là active_for_authentication?
( Tài liệu )
active_for_authentication?
thay vì chỉ active?
.
the method is now called active_for_authentication?
có nghĩa là tên phương thức của bạn phải được active_for_authentication?
thay vì active?
.
active_for_authentication?
phải là một phương pháp công khai!
super and self.is_active?
có thể được đơn giản hóa đểsuper && is_active?
Thêm một cột vào User
mô hình: allowed_to_log_in
.
Sau đó, thêm cái này vào /app/models/user.rb
:
def active_for_authentication?
super and self.allowed_to_log_in?
end
Nếu bạn muốn thông báo cho người dùng bằng một thông báo tùy chỉnh, bạn cũng có thể thêm thông báo này:
def inactive_message
"You are not allowed to log in."
end
Tôi nghĩ rằng điều đó khá quan trọng vì thông điệp chuẩn từ Devise nói:
"Tài khoản của bạn chưa được kich hoạt."
Điều đó gây khó hiểu cho người dùng và nguyên nhân thực sự là do bạn đã “cấm” họ đăng nhập.
Bạn muốn ủy quyền chứ không phải xác thực. Mặc dù vậy, Devise chỉ thực hiện sự tự tin.
Tức là devise chỉ cho bạn biết rằng người dùng là người mà anh ta nói.
Bạn cần một cái gì đó khác để cấm anh ta sử dụng trang web.
Ủy quyền là một chủ đề phổ biến và có toàn bộ danh sách các loại đá quý có thể giúp bạn làm điều đó:
http://ruby-toolbox.com/categories/rails_authorization.html
Hãy lựa chọn của bạn.
Có vẻ như bạn có thể quan tâm đến cancan