ประดิษฐ์ - ฉันจะห้ามไม่ให้ผู้ใช้บางรายลงชื่อเข้าใช้ได้อย่างไร


105

ฉันใช้ Devise สำหรับการตรวจสอบสิทธิ์ในแอปพลิเคชันของฉัน

ฉันจะห้ามไม่ให้ผู้ใช้บางรายลงชื่อเข้าใช้ - ประเภทปิดการใช้งานผู้ใช้ได้อย่างไร


42
นี่คือคำถามที่ถูกต้องและควรจะเปิด - OP จะถามว่า "ฉันจะห้ามผู้ใช้บางอย่างจากการลงนามใน" ใช้ประดิษฐ์
Zabba

คำตอบ:


149

ทำเช่นนี้:

สร้างคอลัมน์ที่เรียกis_activeสำหรับUserโมเดล

จากนั้นเพิ่มรหัสด้านล่างลงในUserโมเดล:

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

อัปเดต

ดังที่ Matt Huggins บันทึกไว้วิธีนี้เรียกว่าactive_for_authentication?( เอกสารประกอบ )


21
ลักษณะเช่นนี้ได้รับการเปลี่ยนชื่อแทนเพียงactive_for_authentication? active?
Matt Huggins

1
the method is now called active_for_authentication?หมายความว่าชื่อวิธีของคุณควรจะแทนactive_for_authentication? active?
fotanus


หมายเหตุสำคัญ: active_for_authentication?ต้องเป็นวิธีสาธารณะ!
Mladen Jablanović

super and self.is_active?สามารถย่อเป็นsuper && is_active?
David

17

เพิ่มคอลัมน์ในUserโมเดล: allowed_to_log_in.

จากนั้นเพิ่มสิ่งนี้ใน/app/models/user.rb:

def active_for_authentication?
    super and self.allowed_to_log_in?
end

หากคุณต้องการแจ้งผู้ใช้ด้วยข้อความที่กำหนดเองคุณสามารถเพิ่มสิ่งนี้ได้เช่นกัน:

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

ฉันคิดว่ามันค่อนข้างสำคัญเพราะข้อความมาตรฐานจาก Devise กล่าวว่า:

"บัญชีของคุณยังไม่ได้เปิดใช้งาน"

สิ่งนี้สร้างความสับสนให้กับผู้ใช้และสาเหตุที่แท้จริงคือคุณได้ "ห้าม" ไม่ให้เข้าสู่ระบบ


ฉันกำลังใช้คุณลักษณะการระงับผู้ใช้ซึ่งใช้งานได้อย่างไรก็ตาม inactive_message "บัญชีของคุณถูกระงับในขณะนี้" แสดงขึ้นสำหรับการลงชื่อสมัครใช้ของผู้ใช้ในตอนนี้ด้วย ฉันสามารถมีข้อความที่ไม่ใช้งานอื่นสำหรับการเปิดใช้งานบัญชีใหม่และการระงับผู้ใช้ได้หรือไม่?
Dercni


ขอบคุณสำหรับความคิดเห็น inactive_message
Chris Farmer

0

คุณต้องการทำการอนุญาตไม่ใช่การพิสูจน์ตัวตน แม้ว่าประดิษฐ์จะทำเฉพาะการพิสูจน์ตัวตนเท่านั้น
เช่นประดิษฐ์เพียงบอกคุณว่าผู้ใช้คือคนที่เขาบอกว่าเขาเป็น
คุณต้องการอย่างอื่นเพื่อห้ามไม่ให้เขาใช้ไซต์นี้

การให้สิทธิ์เป็นหัวข้อยอดนิยมและมีรายการอัญมณีทั้งหมดที่สามารถช่วยคุณได้:
http://ruby-toolbox.com/categories/rails_authorization.html
เลือกของคุณ


6
ฉันรู้ถึงความแตกต่าง สิ่งนี้คือฉันต้องการห้ามผู้ใช้ลงชื่อเข้าใช้ไม่เข้าถึงคอนโทรลเลอร์บางตัว
Dimitar Vouldjeff

-2

ดูเหมือนว่าคุณอาจสนใจ cancan


1
นี่ไม่ใช่คำตอบสำหรับคำถามที่ถาม คนส่วนใหญ่ทราบความแตกต่างระหว่างการอนุญาตและการรับรองความถูกต้อง คำถามคือคุณจะทำอย่างไรให้ผู้ใช้ไม่สามารถเข้าสู่ระบบได้
isaacsloan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.