ฉันใช้ Devise สำหรับการตรวจสอบสิทธิ์ในแอปพลิเคชันของฉัน
ฉันจะห้ามไม่ให้ผู้ใช้บางรายลงชื่อเข้าใช้ - ประเภทปิดการใช้งานผู้ใช้ได้อย่างไร
ฉันใช้ Devise สำหรับการตรวจสอบสิทธิ์ในแอปพลิเคชันของฉัน
ฉันจะห้ามไม่ให้ผู้ใช้บางรายลงชื่อเข้าใช้ - ประเภทปิดการใช้งานผู้ใช้ได้อย่างไร
คำตอบ:
ทำเช่นนี้:
สร้างคอลัมน์ที่เรียก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?
( เอกสารประกอบ )
active_for_authentication?
active?
the method is now called active_for_authentication?
หมายความว่าชื่อวิธีของคุณควรจะแทนactive_for_authentication?
active?
active_for_authentication?
ต้องเป็นวิธีสาธารณะ!
super and self.is_active?
สามารถย่อเป็นsuper && is_active?
เพิ่มคอลัมน์ใน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 กล่าวว่า:
"บัญชีของคุณยังไม่ได้เปิดใช้งาน"
สิ่งนี้สร้างความสับสนให้กับผู้ใช้และสาเหตุที่แท้จริงคือคุณได้ "ห้าม" ไม่ให้เข้าสู่ระบบ
คุณต้องการทำการอนุญาตไม่ใช่การพิสูจน์ตัวตน แม้ว่าประดิษฐ์จะทำเฉพาะการพิสูจน์ตัวตนเท่านั้น
เช่นประดิษฐ์เพียงบอกคุณว่าผู้ใช้คือคนที่เขาบอกว่าเขาเป็น
คุณต้องการอย่างอื่นเพื่อห้ามไม่ให้เขาใช้ไซต์นี้
การให้สิทธิ์เป็นหัวข้อยอดนิยมและมีรายการอัญมณีทั้งหมดที่สามารถช่วยคุณได้:
http://ruby-toolbox.com/categories/rails_authorization.html
เลือกของคุณ
ดูเหมือนว่าคุณอาจสนใจ cancan