Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

Master Devise:คู่มือสำคัญสำหรับการตรวจสอบสิทธิ์ Ruby on Rails

ด้วยดาว GitHub มากกว่า 20,000 ดวงและการบูรณาการมากมาย Devise gem จึงเป็นหนึ่งในอัญมณีที่ได้รับความนิยมมากที่สุดในภูมิทัศน์ Ruby แล้วทำไมเราถึงเรียกมันว่าเป็นหนึ่งในอัญมณีที่ "ซ่อนเร้น" ของ Ruby? แม้ว่านักพัฒนาส่วนใหญ่จะได้รับความนิยม แต่นักพัฒนาส่วนใหญ่ก็แค่ขีดความสามารถของไลบรารีเพียงผิวเผินเท่านั้น

ในซีรีส์สองตอนนี้ เราจะเจาะลึกเกี่ยวกับ Devise

ในส่วนแรกนี้ เราจะเรียนรู้พื้นฐานบางประการ รวมถึง:

  • Device คืออะไร และเหตุใดคุณจึงควรใช้อุปกรณ์ดังกล่าวตั้งแต่แรก รวมถึงบางสถานการณ์ที่ไม่แนะนำให้ใช้ ไม่ เพื่อใช้มัน
  • วิธีติดตั้ง Devise และใช้ในโครงการของคุณ
  • วิธีปรับแต่งไลบรารีสำหรับโครงการของคุณ

ในส่วนที่สอง เราจะดูการใช้งาน Devise ขั้นสูงเพิ่มเติม รวมถึง:

  • OmniAuth และการใช้ Devise สำหรับแอปพลิเคชัน API เท่านั้น
  • การบูรณาการ Devise เข้ากับไลบรารีการอนุญาต

มาเริ่มกันเลย!

ข้อกำหนดเบื้องต้น

ในบทช่วยสอนนี้ เราจะใช้แอปพลิเคชัน Ruby on Rails 7 แบบง่ายๆ ที่มีผู้ใช้และงานต่างๆ ผู้ใช้สามารถลงทะเบียน เข้าสู่ระบบ และออกจากระบบ โดยสามารถเข้าถึง 08 , 12 , 24 และ 37 การดำเนินการสำหรับงานขึ้นอยู่กับบทบาทที่ได้รับมอบหมาย

เราจะใช้แอปนี้เพื่อสร้างคุณลักษณะที่ซับซ้อนมากขึ้นเรื่อยๆ และในระหว่างนี้ เราจะแสดงคุณลักษณะอันทรงพลังของ Devise ที่ใช้งานจริง

เริ่มต้นด้วยการแนะนำ Devise สั้นๆ กัน

ขอแนะนำ Devise สำหรับ Ruby

Devise เป็นไลบรารีการตรวจสอบความถูกต้องที่สร้างขึ้นจาก Warden ซึ่งเป็นเฟรมเวิร์กการตรวจสอบความถูกต้องแบบแร็ค

Warden จัดการเซสชันผู้ใช้โดยใช้สตริงเซสชันที่ปลอดภัยเพื่อตรวจสอบตัวตนของผู้ใช้ที่เข้าสู่ระบบ นอกจากนี้ยังจัดการผู้ใช้ที่ไม่ใช่ด้วย เข้าสู่ระบบเพื่อให้แน่ใจว่าไม่สามารถเข้าถึงทรัพยากรที่ถูกจำกัดได้

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

คุณสมบัติเด่นอีกประการหนึ่งของ Devise ก็คือความเป็นโมดูลาร์ ไลบรารีมาพร้อมกับโมดูลประมาณ 10 โมดูลซึ่งช่วยให้คุณสามารถระบุได้อย่างชัดเจนว่าคุณต้องการจัดการการรับรองความถูกต้องในแอปพลิเคชันของคุณอย่างไร คุณไม่จำเป็นต้องใช้ทั้ง 10 โมดูล แต่คุณเปิดใช้งานและใช้เฉพาะสิ่งที่คุณต้องการสำหรับแอปของคุณเท่านั้น เราจะอธิบายโมดูลเหล่านี้ในภายหลัง ซึ่งรวมถึง 44 โมดูล 57 , 64 และอื่นๆ

ด้วยเหตุนี้ มาเริ่มสร้างแอป Tasks ของเราและติดตั้ง Devise กันดีกว่า

เริ่มต้นใช้งาน:การติดตั้ง Devise

สร้างแอป Rails 7 ใหม่โดยใช้ 75 . หรือเพียงดึงโค้ดของแอปตัวอย่างของเราจาก repo

ตรวจสอบให้แน่ใจว่าคุณอยู่ในไดเรกทอรีรากของแอป จากนั้นเรียกใช้ 80 . สิ่งนี้จะเพิ่ม Devise gem ให้กับ Gemfile ของแอปของคุณ หลังจากนี้ ให้รัน 98 เพื่อติดตั้ง Devise และสร้างไฟล์ Initializer (เราจะพิจารณาไฟล์นี้ให้ละเอียดยิ่งขึ้นเมื่อเราศึกษาโมดูลของ Devise)

เมื่อคุณรันคำสั่งนี้ ตัวสร้างจะให้คำแนะนำการตั้งค่าเล็กน้อยเพื่อให้ Devise ทำงานตามที่คาดไว้ เพียงทำตามคำแนะนำที่ให้ไว้ คุณก็พร้อมแล้ว

ต่อไป เรามาสร้างโมเดลผู้ใช้ที่ Devise จะใช้งานได้

การสร้างโมเดลผู้ใช้ประดิษฐ์

Devise ต้องการรุ่นผู้ใช้ สิ่งที่คุณเรียกโมเดลนี้จะขึ้นอยู่กับความชอบและกรณีการใช้งานแอปของคุณโดยสิ้นเชิง แต่โดยปกติแล้วจะเป็น 107 หรือ 116 .

ดำเนินการต่อและสร้างโมเดลผู้ใช้ Devise ด้วย 120 . สิ่งนี้จะสร้าง 139 รุ่นภายใต้ 143 ไฟล์การโยกย้ายเพื่อสร้างตารางผู้ใช้ และเส้นทางสำหรับการเข้าถึงทรัพยากรผู้ใช้:

 

เรียกใช้ 158 เพื่อดำเนินการย้ายและตั้งค่าตารางผู้ใช้ เมื่อทำเสร็จแล้ว เราก็มีโมเดลผู้ใช้ที่เราสามารถใช้สำหรับการตรวจสอบสิทธิ์ทุกสิ่งได้

ต่อไป เรามาตั้งค่าโมเดลงานเพื่อใช้ในการก้าวไปข้างหน้า

การสร้างแบบจำลองงาน

โปรดจำไว้ว่าเมื่อใช้ Devise แอปง่ายๆ ของเราต้อง:

  • ให้ผู้ใช้สามารถลงทะเบียนได้
  • ให้ผู้ใช้สามารถลงชื่อเข้าใช้และออกจากแอปได้
  • ให้ผู้ใช้สร้างงานที่จะเป็นของพวกเขา
  • อนุญาต (หรือไม่อนุญาตให้) ผู้ใช้โต้ตอบกับงาน ขึ้นอยู่กับบทบาทของพวกเขา

ด้วยเหตุนี้ เรามาสร้างโมเดลงานที่ผู้ใช้จะโต้ตอบด้วย:

 

ตอนนี้เราควรจะมีโมเดลงานที่เกี่ยวข้องกับผู้ใช้ที่สร้างมันขึ้นมา ชื่อ เนื้อหา และสถานะ (แสดงว่าเสร็จแล้วหรือไม่)

หลังจากนั้นให้รัน 162 เพื่อสร้างตารางงาน นอกจากนี้ ตรวจสอบให้แน่ใจว่าคุณเชื่อมโยงงานกับผู้ใช้:

 

เมื่อคุณเรียกใช้ตัวสร้างโครงนั่งร้าน ความสัมพันธ์ 173 จะถูกเพิ่มเข้าไปในโมเดลงานโดยอัตโนมัติ ในทำนองเดียวกัน ให้แก้ไขโมเดลงานเพื่อใช้ 183 สำหรับสถานะที่แสดงด้านล่าง:

 

ด้วยเหตุนี้ เราจึงพร้อมที่จะเจาะลึกเข้าไปใน Devise แล้ว มาเริ่มกันที่ภาพรวมโดยย่อของโมดูลของ Devise

โมดูลใน Devise สำหรับ Ruby

ดังที่เราได้กล่าวไว้ในบทนำ หนึ่งในคุณสมบัติหลักของ Devise ก็คือความเป็นโมดูล แต่จริงๆ แล้ว "โมดูลาร์" หมายความว่าอย่างไรในกรณีนี้? มันหมายถึงการแยกกระบวนการตรวจสอบความถูกต้องออกเป็นส่วนต่างๆ เพื่อจัดการอย่างเป็นอิสระ

Devise เวอร์ชันล่าสุด (ณ เวลาที่เขียน) มี 10 โมดูล:

  1. ฐานข้อมูลสามารถตรวจสอบได้ - โมดูลนี้จะใช้รหัสผ่านที่ผู้ใช้ระบุและแปลงเป็นแฮชที่ปลอดภัยซึ่งจะถูกจัดเก็บไว้ในฐานข้อมูล โมดูลยังจัดการการตรวจสอบเมื่อผู้ใช้ลงชื่อเข้าใช้ด้วย
  2. ตรวจสอบได้ทุกอย่าง - เปิดใช้งานการรับรองความถูกต้อง OmniAuth
  3. ล็อคได้ - โมดูลนี้จะล็อคบัญชีขึ้นอยู่กับจำนวนการเข้าสู่ระบบที่ล้มเหลว บัญชีจะสามารถเข้าถึงได้อีกครั้งหลังจากช่วงระยะเวลาหนึ่งหรือทางอีเมล
  4. ติดตามได้ - ติดตามจำนวนการเข้าสู่ระบบที่บัญชีสร้างขึ้น ที่อยู่ IP ที่ใช้ และการประทับเวลาการเข้าสู่ระบบ
  5. ยืนยันได้ - ส่งอีเมลพร้อมคำแนะนำในการยืนยันเมื่อมีการลงทะเบียนบัญชี และจะตรวจสอบว่าบัญชีผู้ใช้ได้รับการยืนยันเมื่อเข้าสู่ระบบหรือไม่
  6. ลงทะเบียนได้ - อนุญาตให้ผู้ใช้ลงทะเบียนบัญชีในแอปของคุณและจัดการการแก้ไขและทำลายบัญชี
  7. สามารถกู้คืนได้ - จัดการการรีเซ็ตรหัสผ่านและการกู้คืนบัญชี
  8. หมดเวลาได้ - หมดอายุเซสชันผู้ใช้หลังจากผ่านระยะเวลาที่กำหนด
  9. ตรวจสอบได้ - ช่วยให้คุณสามารถกำหนดกฎการตรวจสอบที่กำหนดเองสำหรับอีเมลและรหัสผ่านที่ผู้ใช้ระบุในระหว่างการสร้างบัญชี
  10. เป็นที่จดจำ - ใช้คุกกี้เพื่อจดจำผู้ใช้ในระหว่างการตรวจสอบสิทธิ์

สำหรับข้อมูลเพิ่มเติม เอกสารประกอบของ Devise เกี่ยวกับโมดูลจะให้บริการคุณได้เป็นอย่างดี ในตอนนี้ เราจะเปลี่ยนไปใช้ตัวช่วยและตัวกรอง Devise

ตัวช่วยประดิษฐ์และตัวกรอง

เหตุผลประการหนึ่งในการใช้ไลบรารีการตรวจสอบสิทธิ์เช่น Devise คือเพื่อจัดการการเข้าถึงทรัพยากรตัวควบคุมและมุมมองที่เกี่ยวข้อง Devise มาพร้อมกับชุดตัวช่วยที่สะดวกสบาย ซึ่งรวมถึง:

  • 195 - ตรวจสอบว่ามีผู้ใช้ที่เข้าสู่ระบบอยู่ในปัจจุบันหรือไม่
  • 206 - ช่วยให้คุณสามารถอ้างอิงผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน ตัวอย่างเช่น คุณสามารถใช้ข้อมูลโค้ดเช่น 218 เพื่อดึงข้อมูลอีเมลของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน
  • 222 - สำหรับเซสชันของผู้ใช้ที่เข้าสู่ระบบในปัจจุบัน
  • 233 - ทำลายเซสชันของผู้ใช้ที่เข้าสู่ระบบและเปลี่ยนเส้นทางไปยังเส้นทางที่ระบุหรือเส้นทางรูท
  • 245 - ตอบสนองด้วยมุมมองการเข้าสู่ระบบของผู้ใช้
  • 256 - ให้สิทธิ์ผู้ใช้ที่เข้าสู่ระบบอยู่ในปัจจุบันในการเข้าถึงมุมมองเพื่อแก้ไขรายละเอียดการลงทะเบียน
  • 265 - ตอบสนองด้วยมุมมองที่มีแบบฟอร์มการลงทะเบียนสำหรับการลงทะเบียนผู้ใช้ใหม่

แค่นั้นแหละสำหรับผู้ช่วยเหลือ ในการจัดการการเข้าถึงตัวควบคุม Devise ให้ 271 ที่เป็นประโยชน์แก่คุณ ตัวกรองที่คุณสามารถใช้ได้ดังนี้:

 

ด้วยเหตุนี้ ตอนนี้เรามาดูวิธีที่ Devise ทำงานร่วมกับพารามิเตอร์ที่แข็งแกร่งของ Rails กันดีกว่า

พารามิเตอร์ที่แข็งแกร่งของ Devise และ Ruby on Rails

พารามิเตอร์ที่แข็งแกร่งเป็นคุณสมบัติ Ruby on Rails ที่รู้จักกันดีซึ่งป้องกันการกำหนดพารามิเตอร์คำขอจำนวนมากให้กับออบเจ็กต์ พารามิเตอร์ที่รัดกุมจำเป็นต้องประกาศพารามิเตอร์คำขออย่างชัดเจนก่อนที่การกำหนดใดๆ จะเสร็จสิ้น โดยปกติจะอยู่ที่ระดับตัวควบคุม

Devise ยังสะท้อนฟังก์ชันการทำงานนี้โดยกำหนดให้พารามิเตอร์ถูกกำหนดไว้อย่างชัดเจนภายใต้การดำเนินการของคอนโทรลเลอร์เฉพาะของ Devise ที่เหมาะสม:

  • 284 - ตามค่าเริ่มต้น จะพบได้ในตัวควบคุม Devise 298 . คีย์ที่อนุญาตตามค่าเริ่มต้นคือ 302 , 315 และ 324 .
  • 332 - พบได้ในคอนโทรลเลอร์ 348 โดยมีคีย์การตรวจสอบสิทธิ์เริ่มต้นที่อนุญาต 350 และ 360 .
  • 370 - พบใน 381 — คีย์การรับรองความถูกต้อง 398 , 407 , 418 และ 424 ได้รับอนุญาต

วิธีที่สะดวกที่สุดในการเพิ่มคีย์การตรวจสอบสิทธิ์ของคุณเองคือการใช้ 436 กรองใน 446 อย่างเช่นที่นี่ โดยที่เราเพิ่ม 459 รหัสที่จำเป็นเมื่อผู้ใช้ลงทะเบียน:

 

กรณีการใช้งานที่น่าสนใจสำหรับพารามิเตอร์ที่แข็งแกร่งของ Devise คือเมื่อคุณต้องการส่งชุดคีย์ไปยังเครื่องฆ่าเชื้อ Devise ตัวอย่างเช่น สมมติว่าเรามีแอป Marketplace อิสระที่ผู้ใช้สามารถเป็น "ผู้รับเหมา" สำหรับการจ้างงาน หรือ "นายจ้าง" ที่สามารถจ้างผู้รับเหมารายอื่น หรือผู้รับเหมาและนายจ้างในเวลาเดียวกันได้

เราสามารถบรรลุฟังก์ชันนี้ได้โดยไม่ต้องลงรายละเอียดทางเทคนิคมากเกินไป โดยอนุญาตให้ผู้ใช้สามารถอัปเดตบัญชีของตนโดยใช้กล่องเลือกสองช่องสำหรับบทบาทที่เกี่ยวข้อง — "ผู้รับเหมา" และ "นายจ้าง" เพื่อให้ผู้ใช้สามารถเลือกอย่างใดอย่างหนึ่งหรือทั้งสองตัวเลือก

วิธีที่รวดเร็วในการบรรลุเป้าหมายนี้คือการใช้อาร์เรย์ที่มีบทบาทเป็นคีย์ แต่พารามิเตอร์ที่แข็งแกร่งของ Rails อนุญาตเฉพาะค่าสเกลาร์ต่อไปนี้:460 , 470 , 489 , 494 , 507 , 515 , 522 , 539 , 549 , 553 , 568 , 579 และ 582 . อย่างที่คุณเห็น โดยค่าเริ่มต้นอาร์เรย์ แฮช และอ็อบเจ็กต์อื่นๆ จะไม่ได้รับอนุญาต

หากต้องการใช้อาร์เรย์ที่อนุญาตหลายบทบาทสำหรับผู้ใช้ของเรา เราสามารถแก้ไขโค้ดของเราดังที่แสดงด้านล่าง:

 

เอกสาร Devise เกี่ยวกับตัวช่วยครอบคลุมหัวข้อโดยละเอียดยิ่งขึ้น

ต่อไป เราจะมาเรียนรู้วิธีปรับแต่งมุมมองและตัวควบคุมของ Devise

การปรับแต่งมุมมองประดิษฐ์

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

ขั้นตอนแรกคือการสร้างมุมมองโดยใช้คำสั่ง 594 . เมื่อคุณทำเช่นนั้น มุมมองที่เกี่ยวข้องจะถูกสร้างขึ้นและวางไว้ใน 608 โฟลเดอร์:

Master Devise:คู่มือสำคัญสำหรับการตรวจสอบสิทธิ์ Ruby on Rails

ลองใช้ตัวอย่างเชิงปฏิบัติในการปรับแต่งมุมมองของ Devise ในส่วนก่อนหน้านี้ เราได้เรียนรู้วิธีเพิ่มคีย์การรับรองความถูกต้องเพิ่มเติมให้กับเจลทำความสะอาด Devise ตอนนี้เรามาขยายตัวอย่างนั้นเพื่อเพิ่ม 611 ไปยังมุมมองการลงทะเบียนผู้ใช้

ตั้งแต่ 628 ฟิลด์ไม่พร้อมใช้งานสำหรับรุ่นผู้ใช้เริ่มต้นของเรา เราจะเพิ่มโดยใช้ 636 การโยกย้าย เรียกใช้คำสั่ง 641 เพื่อเริ่มการย้ายข้อมูลและเพิ่มคอลัมน์ลงในตารางผู้ใช้

จากนั้น เปิดไฟล์การลงทะเบียนผู้ใช้ใหม่และแก้ไขดังต่อไปนี้:

 

การสร้างมุมมอง Devise ด้วยวิธีนี้เป็นเรื่องปกติหากคุณทำงานกับมุมมองทั้งหมด แต่สมมติว่าคุณต้องการปรับแต่งมุมมองสองสามมุมมองเท่านั้น คุณจะทำเช่นนี้ได้อย่างไร? คุณเพียงแค่ส่งคำสั่งตัวสร้างรายการมุมมองที่คุณต้องการโดยระบุแฟล็กมุมมอง 655 . ในกรณีนี้ จะสร้างเฉพาะมุมมองที่เกี่ยวข้องกับกระบวนการเข้าสู่ระบบ/ออกจากระบบและมุมมองที่จัดการการลงชื่อสมัครใช้

ต่อไป เรามาดูรายละเอียดการปรับแต่ง Devise กันดีกว่าโดยเรียนรู้วิธีปรับแต่งตัวควบคุมและเส้นทางของห้องสมุด

การปรับแต่งอุปกรณ์ควบคุมและเส้นทาง

การปรับแต่งมุมมองของ Devise จะทำให้คุณไปได้ไกลเท่านั้น หากคุณต้องการปรับแต่งอย่างแท้จริง คุณต้องไปที่ตัวควบคุมและเส้นทางของห้องสมุด

สมมติว่าเราต้องการส่งอีเมลถึงผู้ดูแลระบบเพื่อแจ้งให้ทราบถึงการลงทะเบียนผู้ใช้ใหม่ทุกครั้งในแอป (นี่ไม่ใช่วิธีที่เหมาะที่สุดในการทำสิ่งต่างๆ แต่ลองมาดูตัวอย่างนี้เพื่อแสดงให้เห็นว่าเราต้องการอะไร)

ขั้นแรก เราต้องแก้ไขการดำเนินการสมัครใช้งานของ 665 . โดยปกติแล้ว คอนโทรลเลอร์ของ Devise จะไม่สามารถเข้าถึงได้โดยตรงเพื่อแก้ไข ดังนั้น เช่นเดียวกับที่เราทำกับมุมมอง เราสามารถสร้างพวกมันได้ดังนี้:

 

บิตสุดท้ายของคำสั่งนั้นคือขอบเขต - ในกรณีนี้คือ 670 . หากต้องการให้เป็นอย่างอื่นก็สามารถเปลี่ยนแปลงได้ตามความเหมาะสม เมื่อคุณทำเสร็จแล้ว คอนโทรลเลอร์ที่สร้างขึ้นควรอยู่ในโครงสร้างที่คล้ายกับสิ่งนี้:

Master Devise:คู่มือสำคัญสำหรับการตรวจสอบสิทธิ์ Ruby on Rails

จากนั้น เปิดไฟล์เส้นทางและแก้ไขเส้นทางของ Devise เพื่อให้สอดคล้องกับการเปลี่ยนแปลงในโครงสร้างตัวควบคุม:

 

ตอนนี้เปิด 687 ที่สร้างขึ้นใหม่ และแก้ไขเพื่อส่งอีเมลถึงผู้ดูแลระบบทุกครั้งที่มีผู้ใช้ใหม่สมัคร:

 

อย่างที่คุณเห็น ด้วยการเข้าถึงตัวควบคุมและการดำเนินการของ Devise คุณสามารถแก้ไขขั้นตอนการตรวจสอบสิทธิ์ของแอปของคุณได้ตามที่คุณต้องการ

เรื่องถัดไป:การใช้งาน Devise ขั้นสูง

ในส่วนแรกของซีรีส์สองตอนนี้ เราได้กล่าวถึงพื้นฐานของ Devise gem แล้ว เราได้เรียนรู้เกี่ยวกับโมดูลต่างๆ ของ Devise รวมถึงวิธีปรับแต่งมุมมองและตัวควบคุม

ในส่วนที่สอง เราจะเจาะลึกการใช้งาน Devise ขั้นสูง รวมถึงการตรวจสอบสิทธิ์ API และวิธีใช้ OmniAuth กับ Devise

ถึงเวลานั้น ขอให้สนุกกับการเขียนโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว!