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

Wed 31 Aug 2016
ใช้เวลาอ่าน 1 นาที

ใช้ 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 function getCredentials

protected function getCredentials(Request $request)  
{  
 $request["isActiv"] = TRUE;  
 $request["usernam"] = $request["email"];
 
 return $request->only(filter_var($request["email"], FILTER_VALIDATE_EMAIL) ? "email" : "usernam", "password","isActiv");
 
 }

โดยก่อนหน้านี้ใน table user เราต้องมี username อยู่ก่อน และใน code อีกอันที่ผมใช้คือ isActive คือถ้า user สมัครมาเองจะยังเข้าใช้ไม่ได้จนกว่าผมจะ active ให้ ก็เช่นเดียวกับ username ต้องมี isActive ใน table user ก่อน

อธิบายคร่าว ๆ ก็คือ เราจะใช้ค่าอะไรบ้างในการ login เข้าระบบ ผมใช้ สามค่า คือ username||email , password, isActive โดยกำหนดค่าให้ก่อนว่าค่าทั้งสามนี้จะใช้อะไร

$request['isActive'] = TRUE;

เราจะใช้ isActive เป็น  1 หรือ TRUE

$request['username'] = $request['email'];

ถ้าเรา login ด้วย username เราก็จะใช้ค่าจาก input หน้าเว็บตรงนี้ตัวแปรเป็น email เพราะไม่ได้แก้หน้าเว็บ

return $request->only(filter_var($request['email'], FILTER_VALIDATE_EMAIL) ? 'email' : 'username', 'password','isActive');

เราก็ return ให้ Laravel ไปตรวจสอบอีกครั้ง โดย return สามค่าที่กำหนด แต่ username และ email ต้องมีการตรวจสอบเพิ่มเติมว่าถ้ากรอกมาไม่ใช่ email ก็จะส่ง username เข้าไปตรวจสอบ

ถัดไป AUDAX 300 RAYONG CHAN