Planet TLWG

Syndicate content
Planet TLWG - http://linux.thai.net/planet
Updated: 1 hour 29 min ago

Thep: Crypto Disk Shutdown Problem Workaround (2)

10 October, 2016 - 11:37

จาก blog ที่แล้ว ที่ได้เขียนถึงการแก้ขัดปัญหา shutdown เครื่อง Debian ที่ใช้ sysvinit ไม่ลง อันเนื่องมาจากการค้างที่ขั้นตอนการปิด crypto disk ด้วยการไปแก้ไฟล์ /lib/cryptsetup/cryptdisks.functions นั้น หลังจากนั้นก็ได้ครุ่นคิดหาวิธีที่เหมาะสมกว่านั้น จนถึงจุดที่คิดว่าน่าจะลองเสนอใน Debian ได้

ปัญหาของการแก้แบบเดิมก็คือ:

  1. ไม่ idempotent เพราะใน do_stop() ไป stop ดีมอน แต่ใน do_start() ไม่ได้สั่ง start ดีมอนใหม่ เพราะสมมุติว่ามันถูก start มาแล้ว และทำแค่หา PID ของดีมอนมาใส่ใน omit file เท่านั้น ซึ่งจะทำให้เกิดปัญหาดีมอนตายได้หากผู้ใช้สั่ง stop, start หรือ restart cryptdisks ขณะที่เครื่องทำงานอยู่ ไม่ใช่ผ่านการ shutdown หรือ reboot ตามปกติ
  2. อาจกระทบผู้ใช้ init ระบบอื่น เพราะฟังก์ชันนี้อาจถูกเรียกใช้จากระบบ init อื่นก็ได้ ทั้งที่ระบบเหล่านั้นอาจไม่ได้มีปัญหานี้ และอาจเกิดผลกระทบไม่พึงประสงค์ได้
  3. ไม่สวยและไม่ปลอดภัย การอ่านค่า PID ด้วย ps, grep, awk ดูเยิ่นเย้อและไม่ปลอดภัย เพราะ awk อยู่ใน /usr/bin ซึ่งเสี่ยงต่อการเรียกในระหว่างการบูตที่อาจจะยังมีแค่ /bin หรือ /sbin ให้ใช้

ปัญหาการกระทบระบบ init อื่น ทำให้มองไปที่การแก้ /etc/init.d/* แทน ซึ่งในอีกแง่หนึ่ง ก็เป็นการแก้ในระดับบนซึ่งเป็นระดับเดียวกับที่ service อื่น ๆ ใช้จัดการกับ sendsigs อยู่แล้ว จึงสรุปว่าน่าจะเหมาะสมด้วยประการทั้งปวง

เบื้องต้นผมจึงไปแก้ที่ /etc/init.d/cryptdisks โดยทำหลังจาก do_start เสร็จแล้ว:

--- /etc/init.d/cryptdisks.orig 2016-10-08 17:14:02.087652932 +0700 +++ /etc/init.d/cryptdisks 2016-10-10 09:42:15.301303974 +0700 @@ -31,9 +31,19 @@ ;; esac +UDEVD_DAEMON="/lib/systemd/systemd-udevd" + case "$1" in start) do_start + + # Omit udev daemon on halt to allow cryptsetup to do the close + UDEVD_PID=$(pidof $UDEVD_DAEMON) + if [ ! -z "$UDEVD_PID" ]; then + OMITDIR=/run/sendsigs.omit.d + mkdir -p $OMITDIR + echo $UDEVD_PID > $OMITDIR/systemd-udevd + fi ;; stop) do_stop

สังเกตว่าในรอบนี้ผมไม่ได้สั่ง stop ดีมอนหลัง do_stop อีกแล้ว เพราะทำให้เกิดปัญหาไม่ idempotent ดังที่กล่าวไปแล้ว อีกทั้งมันไม่จำเป็นเลย เพราะ service script ของ udev เองก็จะทำหน้าที่ stop ดีมอนนี้ให้อยู่แล้ว สิ่งที่จำเป็นมีแค่ชะลอไม่ให้ดีมอนถูกฆ่าจนถึงตอนนั้นก็พอ

และสังเกตว่าผมไม่ได้ใช้สคริปต์เยิ่นเย้อในการหา PID ของดีมอนอีกแล้ว ในเมื่อสามารถใช้ /bin/pidof ที่สั้นกระชับและปลอดภัยกว่า

อย่างไรก็ดี สิ่งที่ยังคาใจอยู่ในขั้นนี้ก็คือ มันควรแก้ที่ udev จะเหมาะสมที่สุดถ้าทำได้ เพราะเป็นเจ้าของดีมอนเอง การแยกตรรกะการละเว้นดีมอนมาไว้ที่ service อื่น ดูไม่สวยเท่าไร

ในรอบที่แล้วผมทำกับ udev ไม่สำเร็จ คาดว่าเป็นเพราะไปแทรกโค้ดที่ลำดับต้น ๆ ตั้งแต่เพิ่งเรียกดีมอนใหม่ ๆ ซึ่ง file system อาจจะยังไม่พร้อม อีกทั้งการเรียกใช้ awk จาก /usr/bin ก็ยังสุ่มเสี่ยงมากในระหว่างบูตอีกด้วย

รอบนี้ผมจึงลองใหม่ให้หายคาใจ โดยไปแทรกโค้ดในลำดับท้ายสุด หลังจาก Waiting for /dev to be fully populated... เสร็จแล้ว:

--- /etc/init.d/udev.orig 2016-10-10 09:40:47.937302585 +0700 +++ /etc/init.d/udev 2016-10-10 09:42:59.701304680 +0700 @@ -203,6 +203,14 @@ else log_action_end_msg 0 'timeout' fi + + # Omit systemd-udevd on halt to allow cryptsetup to do the close + UDEVD_PID=$(pidof $DAEMON) + if [ ! -z "$UDEVD_PID" ]; then + OMITDIR=/run/sendsigs.omit.d + mkdir -p $OMITDIR + echo $UDEVD_PID > $OMITDIR/udev + fi ;; stop)

ตรวจความเรียบร้อยแล้วก็ลองรีบูตเครื่องดู... ผ่าน!

ถึงจุดนี้ ก็เลยคิดว่าควรลองเสนอเข้าบั๊ก Debian #791944 ดู (ข้อความ #103) เพื่อให้ผู้ดูแลพิจารณาตามความเหมาะสม

bact: เราเป็น เจ้า-ของ อะไรบ้างในยุคดิจิทัล?

7 October, 2016 - 22:49

คุยกับเพื่อนเรื่องการใช้ซอฟต์แวร์เสรี/โอเพนซอร์ส ก็นึกเรื่องนี้ขึ้นมาได้ ดูเหมือนเราจะใช้โอเพนซอร์สน้อยลงโดยเปรียบเทียบ คือตอนนี้ใช้สมาร์ตโฟนเยอะขึ้น แล้วมันไม่ค่อยมีโอเพนซอร์สเท่าไหร่

นึกๆ อืม มันก็คงเป็นไปแบบนี้แหละ ตอนนี้นึกไม่ออกว่าจะทำยังไง ถึงจะกลับมารู้สึกว่าเราเป็นผู้ควบคุมเครื่องและข้อมูลของเราเองได้มากขึ้นเหมือนเมื่อก่อน คือเรื่องมันเป็นงี้ ….

ในยุคคอมพิวเตอร์ตั้งโต๊ะ

Hardware: เราเลือกฮาร์ดแวร์ได้ตามใจชอบ เสียก็ซ่อมหรือเปลี่ยนเป็นส่วนๆ ได้ พอจะทำได้ด้วยตัวเอง

Software: ซอฟต์แวร์ก็มีที่เป็นซอฟต์แวร์เสรี/โอเพ่นซอร์สให้เลือก จะใช้ OpenOffice, Linux อะไรก็ว่าไป

ในยุคโน๊ตบุ๊ก

Hardware: ตัวฮาร์ดแวร์นี่เริ่มยากละ เลือกเป็นชิ้นๆ ไม่ค่อยได้ มันมาเป็นเซ็ต ช่วงหลังๆ เสียก็ต้องเปลี่ยนยกบอร์ด ยังพออัปเกรดแรมและฮาร์ดดิสก์ได้ แต่ล่าสุด บางเครื่องเปิดฝาออกมาดูเองยังทำไม่ค่อยจะได้ อัปเกรดเองยาก หรือไม่รองรับการอัปเกรดเเลย กระจกจอภาพกับแผงวงจรจอติดกาวกันแน่น จะเปลี่ยนต้องเปลี่ยนทั้งฝาไปเลย

Software: ซอฟต์แวร์ไม่เปลี่ยนอะไรนัก เลือกได้เหมือนๆ เดิม ไม่ต่างจากสมัยเดสก์ท็อป

ในยุคมือถือ-คลาวด์

Hardware: ฮาร์ดแวร์นี่เสียก็เปลี่ยนยกแผงหรือแทบโยนทิ้งเพราะซ่อมไม่คุ้ม

Software: ซอฟต์แวร์ทางเลือกพวกโอเพนซอร์สก็หาลำบากหน่อย ส่วนหนึ่งก็เพราะยังไม่ค่อยมี โครงการเดิมๆ ก็ต้องใช้เวลาในการย้ายแพลตฟอร์ม (จนป่านนี้ OpenOffice/LibreOffice บนมือถือยังไม่เสร็จเลย) อีกส่วนก็เพราะลักษณะการใช้งานจำนวนนึงมันไปผูกอยู่กับคลาวด์มากขึ้น (เกี่ยวกับพื้นที่จัดเก็บที่จำกัดของอุปกรณ์มือถือด้วย) ทำให้แม้จะมีซอฟต์แวร์โอเพนซอร์สฝั่งเซิร์ฟเวอร์ออกมาให้ใช้ (อย่าง ownCloud) แต่พอต้องติดตั้งที่ฝั่งเซิร์ฟเวอร์ด้วย ผู้ใช้ทั่วไปก็ทำเองได้ยากขึ้น

ผู้(รับ)ใช้ ไม่ใช่ เจ้า-ของ

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

การควบคุมเหล่านี้มีหลายระดับ/ลักษณะ

ควบคุมด้วยความรู้

ระบบคอมมันซับซ้อนขึ้น คนทั่วไปมีความรู้ไม่มากพอที่จะซ่อมมันละ (นึกถึงรถยนต์สมัยก่อน กับรถยนต์ที่ควบคุมด้วยคอมพิวเตอร์สมัยนี้ สมัยนี้จะซ่อมเองก็วุ่นหน่อย)

ถ้าอยากมีความรู้ในการซ่อม ก็อาจจะต้องไปเทรนกับผู้ผลิต (และด้วยวงรอบการออกผลิตภัณฑ์ใหม่ที่เร็วขึ้น ก็ต้องไปเทรนเรื่อยๆ จะเทรนครั้งเดียวแล้วไปเทรนคนอื่นๆ ต่อเองก็ไม่ค่อยได้ มันไม่ทันน่ะ)

ควบคุมทางกายภาพ/การเข้าถึง

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

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

ควบคุมด้วยกฎหมาย

ต่อให้มีความรู้ มีเครื่องมือ แต่ก็อาจจะซ่อมไม่ได้ถนัดอยู่ดี เพราะการเข้าถึงหรือแก้ไขอะไรบางอย่างในระบบ อาจหมายถึง “การละเมิดทรัพย์สินทางปัญญา” ข้อหาเข้าถึงงานอันมีลิขสิทธิ์ที่มีระบบป้องกันทางเทคโนโลยีโดยไม่ได้รับอนุญาตจากเจ้าของลิขสิทธิ์

ผู้ผลิตอาจจะออกใบอนุญาตในการซ่อม เฉพาะคนที่มีใบอนุญาตถึงจะซ่อมได้ ก็จัดสอบกันไป

ชาวนาจะซ่อมรถแทรกเตอร์ของตัวเองเองก็ไม่ได้ เพราะบริษัทผู้ผลิตบอกว่ามันจะผิดกฎหมายลิขสิทธิ์นะ

เราอยู่ในสภาพแวดล้อมทางคอมพิวเตอร์ที่ต้องขออนุญาตกันมากขึ้นเรื่อยๆ

ทั้งๆ ที่มันเป็นเครื่องเป็นของที่เราซื้อมา แต่เราไม่ได้เป็น “เจ้า” ของมันอีกต่อไปแล้ว ผู้ผลิตต่างหากที่เป็น “เจ้า” จริงๆ ที่ควบคุมของที่เราซื้อมา

เรื่องที่เกี่ยวข้อง

ภาพประกอบโดย Karen Blakeman

Thep: Crypto Disk Shutdown Problem Workaround

7 October, 2016 - 16:08

เมื่อเช้านี้รีบูตเครื่องหลายรอบมาก กว่าจะได้เริ่มงาน เหตุเพราะถูกบั๊ก Debian #839888 ของ cryptsetup กัด สุดท้ายเลยได้นั่งลงแก้ปัญหา crypto disk ที่ทำให้ shutdown เครื่องไม่ลงมาเป็นปีเสียที

ผมใช้ encrypted file system ในโน้ตบุ๊กเครื่องปัจจุบันมาตั้งแต่เริ่มแรก แต่มาเริ่มมีปัญหาในรอบ Stretch นี้น่าจะเกือบปีแล้ว คือในการ shutdown เครื่องมันจะมาค้างตรงขั้น Stopping remaining crypto disks... แล้วก็ไม่ไปไหน แม้จะลองทิ้งไว้เป็นชั่วโมงก็ตาม สุดท้ายต้องยอมกดปุ่ม power ค้างเพื่อตัดไฟให้เครื่องมันดับ แล้วก็ให้มันมา recover journal ตอนเปิดเครื่องใหม่เอา

ปล่อยให้เป็นอย่างนี้มาเป็นปี เพราะยังไม่มีเวลาไปนั่งแก้ปัญหา ตัว cryptsetup เองก็มีอัปเดตใน Debian มาหลายรุ่น แต่ละรุ่นก็ได้แต่ภาวนาว่าจะมีการแก้ปัญหานี้ แต่ก็ไม่มี และในเมื่อเครื่องมันยังเปิดใช้งานได้ทุกวัน ผมเลยปล่อยให้มันเป็นอย่างนี้มาเรื่อย ๆ (ซึ่งไม่ควร)

จนกระทั่งเมื่อเช้ามันบูตไม่ขึ้น! เพราะรุ่น 2:1.7.2-1 มีบั๊กในสคริปต์ที่พิมพ์ผิด ซึ่งเป็นรายงานที่ผมเพิ่งจะได้อ่านหลังจากที่แก้ปัญหาด้วยตัวเองจนบูตเครื่องขึ้นมาต่อเน็ตได้แล้ว และปรากฏว่าแพตช์ที่แก้เองไปก็เหมือนกันกับแพตช์ในรายงานบั๊กเป๊ะ

แต่ก็ไม่ได้ทำให้ปัญหาเครื่องค้างตอน shutdown หายไป แต่ไหน ๆ ก็มือเปรอะไปแล้ว เลยนั่งไล่ต่อ จนกระทั่งไปพบคำสนทนาที่สาวไปจนถึงบั๊ก Debian #791944 ซึ่งทำให้รู้ว่าปัญหานี้เกิดเฉพาะกับระบบที่ใช้ sysvinit เท่านั้น ไม่เกิดกับ systemd และในความเห็น #72 Guilhem Moulin ได้พบว่าในขั้นตอนการ shutdown นั้น ดีมอน systemd-udevd ได้ถูก kill ไปก่อนที่จะถึงขั้นปิด crypto disk ทำให้คำสั่ง cryptsetup luksClose "$dst" ค้าง!

พิษ systemd อีกแล้วครับพี่น้อง!

แต่อย่างไรก็ดี ในเมื่อได้เบาะแสอย่างนี้แล้ว ถ้าเราสามารถทำให้ดีมอน systemd-udevd อยู่รอดจากการฆ่าจนถึงขั้นปิด crypto disk ได้ ปัญหาของเราก็จะหมดไป

แน่นอนว่าวิธีที่ถูกหลักการนั้น ต้องไปแก้ที่ระบบ init และสถานะล่าสุดของบั๊กดังกล่าว ก็ได้ reassign ไปให้แพกเกจ initscripts แล้ว แต่เครื่องผมล่ะ? ขอแก้ปัญหาเฉพาะหน้าระหว่างรอละกัน

วิธีแก้ขัดของผมคือ ในขั้นตอน sendsigs ของการ shutdown เพื่อ Asking all remaining processes to terminate นั้น เราสามารถละเว้นบางโพรเซสจากการรับ SIGTERM ได้ โดยเพิ่มไฟล์ที่เก็บ PID ไว้ในไดเรกทอรี /run/sendsigs.omit.d/ ตัวอย่างของ service ที่ทำแบบนี้ก็เช่น rsyslog และ wpasupplicant ผมก็จัดการยืมมาใช้กับ cryptdisks เสีย โดยแก้ไฟล์ /lib/cryptsetup/cryptdisks.functions ในฟังก์ชัน do_start() ให้เพิ่ม PID ของ systemd-udevd ไว้ในรายชื่อโพรเซสละเว้น:

--- cryptdisks.functions.orig 2016-10-07 12:11:36.104693329 +0700 +++ cryptdisks.functions 2016-10-07 13:53:10.640533260 +0700 @@ -758,6 +758,11 @@ do_start () { done 3<&1 umount_fs + # Omit udev daemon on halt to allow cryptsetup to do the close + OMITDIR=/run/sendsigs.omit.d + mkdir -p $OMITDIR + ps x | grep "systemd-udevd[ ]" | awk '{print $1}' > $OMITDIR/systemd-udevd + log_action_end_msg 0 }

เท่านี้ก็สามารถ shutdown เครื่องโดยไม่ค้างได้แล้ว (บางคนอาจเสนอให้ไปทำใน /etc/init.d/udev ไปเลย แต่ผมลองแล้ว มันทำให้ udev ไม่ start ตอนเปิดเครื่องเลยครับ บางที file system อาจยังไม่พร้อมในขั้นนั้นกระมัง?)

และเพื่อความแน่ใจ ผมจัดการ stop ดีมอนหลังจากที่ปิด crypto disk แล้วอีกชั้นหนึ่งด้วย ในฟังก์ชัน do_stop():

@@ -780,7 +785,11 @@ do_stop () { done 3<&1 done - log_action_end_msg 0 + # Kill udevd as we postponed it + OMITDIR=/run/sendsigs.omit.d + start-stop-daemon --stop -p $OMITDIR/systemd-udevd --user root --quiet --oknodo --retry 5 + + log_action_end_msg $? } # Convenience function to handle $VERBOSE

หมดไปครึ่งวัน แต่ตัดรำคาญเวลาเปิด-ปิดหรือรีบูตเครื่องไปได้เยอะเลยครับ และยังลดความเสี่ยงที่ file system จะเสียหายลงด้วย

bact: Forensic Service Act 2016 and the protection of personal data

4 September, 2016 - 23:22

The Forensic Service Act B.E. 2559 (2016) (พระราชบัญญัติการให้บริการด้านนิติวิทยาศาสตร์ พ.ศ. 2559) has been announced on the Royal Gazette on 3 August 2016, after the National Legislative Assembly passed it on 10 June 2016. As the regulations about the handling of forensic data are yet to be announced, we don’t have an exact idea yet on how the process and conditions will look like. What we know at the moment is who is going to responsible for the making of those regulations.

Read the Act from NLA website, also comments from the Review Subcommittee of the NLA.

พ.ร.บ.การให้บริการด้านนิติวิทยาศาสตร์ พ.ศ. 2559 ประกาศในราชกิจจานุเบกษาแล้ว อ่านตัวกฎหมายและความเห็นของคณะกรรมาธิการวิสามัญพิจารณาร่างฯ

มีสามเรื่องหลักที่กฎหมายที่กำหนด คือ

  1. ขยายหน้าที่ของ สถาบันนิติวิทยาศาสตร์ กระทรวงยุติธรรม (หมวด 1) เช่น มาตรา 5 (5) “ส่งเสริมและพัฒนาการให้บริการด้านนิติวิทยาศาสตร์ของเอกชน”
  2. กำหนดให้ข้อมูลจากบริการนิติวิทยาศาสตร์ต้องเป็นความลับ กำหนดวิธีการเก็บรักษา การทำลาย และการเปิดเผย (หมวด 2)
  3. ตั้ง คณะกรรมการกำกับการให้บริการด้านนิติวิทยาศาสตร์ เพื่อกำกับดูแลเรื่องมาตรฐาน ค่าบริการ การอุทธรณ์ และการแลกเปลี่ยนข้อมูล (หมวด 3)หมวด 2 เรื่องข้อมูล มีสองมาตรา ว่าด้วยการจัดเก็บและทำลายข้อมูล (มาตรา 8) และการเปิดเผยข้อมูล (มาตรา 9) แต่รายละเอียดยังไม่มี ต้องรอคณะกรรมการฯประกาศ

Three main things this Act is doing are:

  1. Expanding duties of Ministry of Justice’s Central Institute of Forensic Science (สถาบันนิติวิทยาศาสตร์) (Chapter 1)
  2. Specifying how the forensic data should be handled (Chapter 2)
  3. Establishing Forensic Service Oversight Committee (คณะกรรมการกำกับการให้บริการด้านนิติวิทยาศาสตร์) who will regulating forensic standards, fees, appeal process, and the exchange of forensic data. (Chapter 3)

According to Section 3 of the Act, “data” in this Act means Any data that comes from the forensic service.

The “Data Chapter” or Chapter 2 of the Act is solely about the confidentially, preservation, and disclosure of data.

Section 8 Data is confidential. Central Institute of Forensic Science has duty to preserve and destroy the data, according to the criteria, methods, and conditions that the Committee will specify by announcing in the Royal Gazette.

Section 9 Data will only be disclose to the person who request for the forensic service. This should be done according to the criteria, methods, and conditions specified by the Committee. Exception is possible if it is a disclosure according to Court Order or Committee Resolution for the purpose of justice.

This means the details on conditions and process about the preservation and disclosure, or, in general, the life cycle of these potentially sensitive personal data are yet to be announced. All of them will be decided by the Forensic Service Oversight Committee, using the power given to them in Section 15 (4) [Preservation] and Section 15 (4/1) [Disclosure].

According to Section 10, the Committee will consist of

  • Ministry of Justice Permanent Secretary — as Chairperson
  • Director of Central Institute of Forensic Science (CIFS) — as Secretary
  • Commissioner-General of the Royal Thai Police
  • Director-General of Department of Medical Sciences
  • Secretary-General of Thai Industrial Standards Institute
  • Secretary-General of the National Human Rights Commission
  • Secretary-General of the Medical Council
  • Commissioner of the Royal Thai Police Office of Forensic Science
  • A group of expert committee members, not exceeding 5 people, appointed by the Minister of Justice. — The Minister should appointed expert committee member from people with knowledge or experience, at least one person each from these fields: forensic science, law, and investigation.

The Director of CIFS will also appointed no more than two officers from CIFS to act as Assistant Secretary for the Committee.

An expert committee member must be of Thai national and must be at least 35 years old (Section 11). He or she will serve for a period of 4 years and cannot serve for more than two terms (Section 12).

Noted that, if the [forensic] data is handled by a State agency, its privacy will be under the protection of the Official Information Act B.E. 2540 (1997). Yet, as you can see from Section 5 (5), the forensic service can be also come from private sector. But Thailand at the moment doesn’t have the law for general data protection outside the public sector yet.

The Data Protection Bill, which will fill the gap, has been proposed in different versions since more than a decade ago, but it is yet to be passed. The latest version of the Bill from July 2015, which has been reviewed by the Council of the State. It is expected to be submitted to NLA for hearing by the end of 2016.

So, keeps your eyes on the Forensic Service Oversight Committee and the forensic data regulations that they going to make. We hope they are going to have public consultations for that.

MrChoke: Laravel 5.2: ใช้ Username และ Email login

31 August, 2016 - 16:48
ใช้ Laravel Framework มาได้สักพัก ก็เกือบปีละมั้ง ตอนนี้ออก 5.3 แล้วยังไม่ได้ลอง dev อยู่บน 5.2 และก็เพิ่งรู้ว่ามันมี LTS ด้วยรุ่นก่อนหน้าก็ 5.1 อะเข้าหัวเรื่องกันเลยดีกว่า ผมใช้ระบบ auth ของ laravel ซึ่งค่าเริ่มต้นให้มาจะใช้ email ในการ login อย่างเดียวก่อนหน้านี้ผมได้แก้ไขให้ user สมัครโดยกรอกชื่อ และ อื่นๆ รวมทั้ง username ไว้โดยยังไม่ได้ใช้ประโยนช์กับมันจนมาถึงวัน present ให้ user ใช้ตอนสมัครก็มีช่อง username ให้กรอกแต่ไม่ได้ใช้ประโยชน์ตอนที่กำลังแนะนำตัวผมเองก็รู้สึกว่า แล้วจะใส่มาทำไมในเมื่อไม่ใส่มา ก็เลยมานั่งไล่ code ในส่วน auth ใหม่พบว่าไม่ยากเท่าไหร่เพราะมีคนแนะนำไว้ เลยเอามาประยุกต์เข้ากับระบบ นั่ง debug อยู่ทั้งบ่าย ฮาๆ (ไหนว่าไม่ยาก) เลยบันทึกเอาไว้เดี๋ยววันหลังใช้อีก แก้แค่ที่เดียวคือ app/Http/Controllers/Auth/AuthController.php โดยไป Override [...]