Kotchasan PHP Framework

วิธีแก้ปัญหาเมื่อลืมรหัสผ่านเข้าระบบแอดมิน

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

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

  1. ระบบไม่สามารถส่งอีเมลได้ ซึ่งใครที่ตกอยู่ในกลุ่มนี้ข้ามหัวข้อขอรหัสใหม่ไปได้เลย
  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) หรือคนที่ต้องการ ง่ายๆ ตรงไปตรงมา แต่เราไม่ได้เอาข้อมูลทั้งหมดไปใส่นะครับ เอาเท่าที่จำเป็นก็พอ ขั้นตอนมีดังนี้
  1. จดจำอีเมล ของ user ที่สามารถเข้าระบบได้ไว้ก่อน
  2. เปลี่ยนแปลงอีเมลของ user นั้นเป็นอีเมลอื่น มั่วๆก็ได้ครับ เนื่องจากเราไม่สามารถมีอีเมลซ้ำกันในระบบมากกว่า 1 คนได้ หรือคนนี้ควรถูกลบออกหากเราเข้าระบบได้แล้ว (สมัครมาใหม่)
  3. นำข้อมูลอีเมลที่จดบันทึกไว้ และข้อมูลในคอลัมน์ password และ คอลัมน์ salt ของ user ที่เข้าระบบได้ไปกรอกแทนที่ข้อมูลที่ต้องการแก้ไข คอลัมน์อื่นไม่ต้องยุ่งกับมัน
  4. เสร็จแล้วทดลองเข้าระบบด้วย user ที่เรารู้ได้เลยครับ
  5. ในกรณีที่ทำสำเร็จ ให้เราทำการเปลี่ยนแปลงข้อมูลเป็นข้อมูลที่ถูกต้องก่อน (เสร็จแล้วอย่าลืมจดรหัสผ่านไว้ด้วยล่ะ) จากนั้นค่อยกลับไปแก้ไข user ต้นฉบับให้กลับเป็นเหมือนเดิม หรือลบทิ้งหากมาจากการสมัครใหม่ เป็นอันเสร็จกระบวนการ
หมายเหตุ สำหรับโปรแกรมที่ผมแจก ส่วนใหญ่อีเมลที่ใช้ในการเข้าระบบจะอยู่ที่คอลัมน์ username ครับ แต่อาจจะมีบางโปรแกรมเช่น GCMS จะใช้ชื่อคอลัมน์ email ในทางปฏิบัติ หากไม่แน่ใจให้เปลี่ยนมันทั้ง 2 คอลัมน์เลยก็ได้