วิธีแก้ปัญหาเมื่อลืมรหัสผ่านเข้าระบบแอดมิน
สำหรับเวอร์ชั่นใหม่ๆทั้งหมดของโปรแกรมที่ผมแจกรวมถึง GCMS จะไม่สามารถแก้ไขรหัสผ่านที่ฐานข้อมูลได้ตรงๆอีกแล้ว เนื่องจากการจัดการรหัสผ่านของคชสารซับซ้อนขึ้น และการพยายามแก้ไขอาจส่งผลกระทบกับผู้ใช้อื่นๆได้
วิธีที่ง่ายและปลอดภัยที่สุดสำหรับการลืมรหัสผ่าน คือ การขอรหัสผ่านใหม่ครับ ซึ่งใครก็ตามที่ระบบสามารถส่งอีเมลได้ให้ใช้วิธีนี้เลย ซึ่งในข้อนี้ปัญหาที่พบส่วนใหญ่แบ่งเป็น 2 กรณีคือ
- ระบบไม่สามารถส่งอีเมลได้ ซึ่งใครที่ตกอยู่ในกลุ่มนี้ข้ามหัวข้อขอรหัสใหม่ไปได้เลย
- ไม่เคยตั้งค่าอีเมลมาก่อนเลย ผมก็ไม่รู้ทำไมนะ แต่หลายคนเจอปัญหานี้ อาจคิดว่าตัวเองความจำดีเลิศไม่มีทางลืมรหัสก็ได้ (แต่ไม่ได้คิดว่าไม่ได้มีสมาชิกคนเดียวในระบบ หรืออาจมีใครแอบเอาอีเมลเรามาขอรหัสผ่านก็ได้) ซึ่งเราจะมาแก้ปัญหาในข้อนี้กัน
การตั้งค่าการส่งอีเมล หากไม่สามารถเข้าระบบได้
ชี้แจงก่อนว่า อย่างแรกเลย Server ของเราต้องส่งอีเมลได้ และเรารู้การตั้งค่าต่างๆของอีเมลที่ถูกต้อง (ที่จะทำให้โปรแกรมสามารถส่งอีเมลได้ ซึ่งอาจจะแตกต่างกันในแต่ละ Server ซึ่งการตั้งค่านี้ต้องสอบถามจากผู้ดูแลระบบ) สำหรับใครที่ไม่ทราบข้อมูลเหล่านี้ แนะนำให้ข้ามหัวข้อนี้ไปเลยเช่นกันอย่างที่สองต้องเข้าถึงไฟล์บน Server ได้ ซึ่งเป้าหมายของเราคือ สามารถแก้ไขไฟล์ /settings/config.php ได้นั่นเอง
ถ้าพร้อมทั้ง 2 อย่าง ลงมือแก้ไขเลย
หลักการของเราก็คือ เราจะทำการแก้ไข config ของระบบ เพื่อให้ระบบสามารถส่งอีเมลได้ โดยการแก้ไขไฟล์ /settings/config.php ให้เปิดไฟล์นี้บน Server ขึ้นแล้วแก้ไขตัวแปรต่างๆให้เหมือนตัวอย่าง หากไม่พบตัวแปรใด สามารถสร้างขึ้นใหม่ได้เลย
<?php
/* config.php */
return array (
.....
'noreply_email' => 'no-reply@domain.tld',
'email_charset' => 'utf-8',
'email_Host' => 'localhost',
'email_Port' => 25,
'email_SMTPSecure' => '',
'email_Username' => '',
'email_Password' => '',
'email_use_phpMailer' => 0,
'email_SMTPAuth' => 0,
.....
);
- noreply_email เป็นอีเมลที่ระบบจะตอบกลับหากไม่สามารถส่งอีเมลได้ ให้ใช้อีเมล์ที่มีอยู่จริงบน Server หรือถ้าไม่มีให้ใช้อีเมลตัวเองที่สามารถใช้งานได้
- email_Host และ email_Port เป็นที่อยู่ของเมล์ Server เครื่องตัวเอง อันนี้ต้องรู้และหามาเอง ค่าตามตัวอย่างเป็นค่าที่ส่วนใหญ่ใช้กัน (ใช้ตามนี้ไปก่อนก็ได้)
หลังจากแก้ไขแล้ว ให้อัปกลับไปทับไฟล์ config เดิม แล้วทำการขอรหัสผ่านใหม่เลย ถ้าโชคดี เราจะได้รับอีเมล์แจ้งรหัสผ่านใหม่แล้วในตอนนี้
คำเตือน ขั้นตอนนี้เป็นขอรหัสผ่านใหม่โดยใช้ความสามารถพื้นฐานของ PHP และ username ที่จะขอรหัสผ่าน ต้องเป็นอีเมลจริงที่สามารถใช้งานได้ ในกรณีที่ไม่แน่ใจ สามารถเข้าไปตรวจสอบและแก้ไขที่ฐานข้อมูลตรงๆได้ (ในกรณีแอดมินสูงสุดให้ขอรหัสผ่านใหม่ ID 1 เท่านั้น)
หากการตั้งค่าด้านบนไม่สามารถส่งอีเมลได้ อาจเป็นเพราะ Mail Server ต้องการการตั้งค่ามากกว่านั้นก็ได้ ซึ่งในกรณีนี้เราจะต้องรู้รายละเอียดการตั้งค่า Mail Server ที่ถูกต้องของ Server ตัวเองก่อน แล้วเอาค่าต่างๆมากำหนดลงในไฟล์ config<?php
/* config.php */
return array (
.....
'noreply_email' => 'no-reply@domain.tld',
'email_charset' => 'utf-8',
'email_Host' => 'localhost',
'email_Port' => 25,
'email_SMTPSecure' => '',
'email_Username' => 'your_username',
'email_Password' => 'your_password',
'email_use_phpMailer' => 1,
'email_SMTPAuth' => 1,
.....
);
- noreply_email และ email_Username เหมือนเดิมครับ ถ้าไม่รู้หรือไม่มีให้ใช้อีเมลตัวเอง บน Server ย้ำนะครับ ว่าต้องบน Server ตัวเอง
- email_Password อันนี้ก็ตาม email_Username ที่กรอกละครับ ว่ารหัสผ่านของอีเมลที่กรอกคืออะไร
- email_Host และ email_Port อันนี้ต้องใช้ค่าที่มาจาก Server ต้องรู้อีกเช่นกัน
- email_SMTPSecure ส่วนใหญ่จะเป็นค่าว่าง อาจมีบ้างที่อาจเป็น ssl (เช่น gmail)
- email_use_phpMailer และ email_SMTPAuth เป็น 1 เท่านั้น ทั้งสองตัว
การแก้ไขรหัสผ่านบนฐานข้อมูลตรงๆ
จริงๆแล้ว ก็อย่างที่ผมเกริ่นไปว่าเราไม่สามารถแก้ไขรหัสผ่านของสมาชิกคนใดๆก็ตามในฐานข้อมูลตรงๆได้ แต่เราจะใช้ทริคเล็กๆในการแก้ปัญหานี้กัน (สามารถใช้วิธีนี้กับเว็บส่วนใหญ่ได้ ที่เราไม่รู้ว่าข้อมูลในช่อง password คืออะไร)หลักการคือ เอาข้อมูลต่างๆที่เรารู้ไปใส่ยัง ID ของแอดมิน (หรือคนที่ต้องการแก้ไข)
ขั้นตอนแรก เราต้องมีสมาชิกที่สามารถเข้าระบบได้อยู่ก่อนแล้ว 1 คน เป็นใครก็ได้ ขอยืมมาจากสมาชิกคนใดที่สามารถเข้าระบบได้มาก่อนก็ได้ หลายๆกรณีเราอาจเลือกที่จะ register ใหม่เลยก็ได้ (หวังว่าจะหามาได้สักคนนะ)
ได้มาแล้ว เราจะเอาข้อมูลของสมาชิกคนนี้ไปใส่แทนแอดมิน (ID 1) หรือคนที่ต้องการ ง่ายๆ ตรงไปตรงมา แต่เราไม่ได้เอาข้อมูลทั้งหมดไปใส่นะครับ เอาเท่าที่จำเป็นก็พอ ขั้นตอนมีดังนี้
- จดจำอีเมล ของ user ที่สามารถเข้าระบบได้ไว้ก่อน
- เปลี่ยนแปลงอีเมลของ user นั้นเป็นอีเมลอื่น มั่วๆก็ได้ครับ เนื่องจากเราไม่สามารถมีอีเมลซ้ำกันในระบบมากกว่า 1 คนได้ หรือคนนี้ควรถูกลบออกหากเราเข้าระบบได้แล้ว (สมัครมาใหม่)
- นำข้อมูลอีเมลที่จดบันทึกไว้ และข้อมูลในคอลัมน์ password และ คอลัมน์ salt ของ user ที่เข้าระบบได้ไปกรอกแทนที่ข้อมูลที่ต้องการแก้ไข คอลัมน์อื่นไม่ต้องยุ่งกับมัน
- เสร็จแล้วทดลองเข้าระบบด้วย user ที่เรารู้ได้เลยครับ
- ในกรณีที่ทำสำเร็จ ให้เราทำการเปลี่ยนแปลงข้อมูลเป็นข้อมูลที่ถูกต้องก่อน (เสร็จแล้วอย่าลืมจดรหัสผ่านไว้ด้วยล่ะ) จากนั้นค่อยกลับไปแก้ไข user ต้นฉบับให้กลับเป็นเหมือนเดิม หรือลบทิ้งหากมาจากการสมัครใหม่ เป็นอันเสร็จกระบวนการ