Devise - Làm cách nào để cấm một số người dùng nhất định đăng nhập?


105

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?


42
Đây là một câu hỏi hợp lệ và nên được mở lại - OP đang hỏi "Làm cách nào để tôi cấm một số người dùng đăng nhập" bằng cách sử dụng devise .
Zabba

Câu trả lời:


149

Làm như thế này:

Tạo một cột được gọi is_activecho Usermô hình.

Sau đó thêm mã bên dưới vào Usermô 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 )


21
Có vẻ như điều này đã được đổi tên thành active_for_authentication?thay vì chỉ active?.
Matt Huggins,

1
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?.
fotanus


Lưu ý quan trọng: active_for_authentication?phải là một phương pháp công khai!
Mladen Jablanović

super and self.is_active?có thể được đơn giản hóa đểsuper && is_active?
David

17

Thêm một cột vào Usermô 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.


Tôi đang triển khai tính năng tạm ngưng người dùng hoạt động, tuy nhiên, inactive_message "Tài khoản của bạn hiện đang bị tạm ngưng" cũng được hiển thị cho người dùng đăng ký. Tôi có thể có các thông báo không hoạt động khác nhau để kích hoạt tài khoản mới và tạm ngưng người dùng không?
Dercni


Cảm ơn vì bình luận inactive_message.
Chris Farmer

0

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.


6
Tôi biết sự khác biệt. Vấn đề là tôi muốn cấm người dùng đăng nhập, không được truy cập bộ điều khiển nhất định.
Dimitar Vouldjeff

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.