ทำให้ใช้งานได้จริง
ระบบล็อกอินให้ผู้ใช้ โดยแอปไม่ต้องเก็บรหัสผ่านเอง
พอแอปมีผู้ใช้มากกว่าหนึ่งคน แอปก็ต้องรู้ว่าใครเป็นใคร บทนี้พาไปทางที่สั้นที่สุด คือให้ Erawan ดูแลการล็อกอินแทน แอปของคุณจะได้ไม่ต้องถือรหัสผ่านของใครเลย
แอปนี้ต้องมีระบบล็อกอินไหม
ถ้าแอปนี้มีคุณใช้อยู่คนเดียว อย่างหน้าแอดมินหรือเครื่องมือที่ทำไว้ใช้เอง ก็ไม่ต้องทำระบบล็อกอินเลย บอกเอไอให้เปิดแอปแบบเจ้าของเท่านั้น (--access owner) แล้ว Erawan จะกันคนอื่นไว้ตั้งแต่หน้าประตู
บทนี้สำหรับแอปที่ลูกค้าหรือคนทั่วไปต้องสมัครแล้วล็อกอินเข้ามาใช้ ระบบล็อกอินของ Erawan ใช้ได้ตั้งแต่แพ็กเกจฟรี
1. ขอระบบล็อกอินจากเอไอ
ถ้าใช้เทอร์มินัล ก็สั่งบรรทัดนี้
แอปจะรีสตาร์ตพร้อมค่าที่ต้องใช้ใน environment คือ AUTH_ISSUER_URL, AUTH_CLIENT_ID, AUTH_CLIENT_SECRET และ AUTH_JWKS_URL คุณไม่ต้องไปสมัครหรือตั้งค่าอะไรที่ฝั่ง Google หรือ LINE เอง
ค่าพวกนี้เป็น OpenID Connect มาตรฐาน ไลบรารีล็อกอินของภาษาไหนก็ใช้ได้ ไม่มีวิธีเฉพาะของ Erawan ให้ต้องเรียนเพิ่ม ถ้าอยากเห็นค่าทั้งหมดในที่เดียว ใช้คำสั่งนี้
2. เลือกว่าให้ล็อกอินด้วยอะไร
ถ้าไม่ได้ตั้งอะไร หน้าล็อกอินจะมีให้เลือกครบสี่ทาง คือ Google, LINE, GitHub และอีเมล เปิดไว้เฉพาะทางที่ผู้ใช้ของคุณมีจริงก็พอ ร้านที่ลูกค้าใช้ LINE กันเป็นหลัก ก็ไม่จำเป็นต้องมีปุ่ม GitHub ให้คนงง
3. ปลายทางหลังล็อกอิน
ล็อกอินเสร็จ ระบบจะพาผู้ใช้กลับไปที่แอป แต่ปลายทางต้องอยู่ในรายการที่ตั้งไว้ ปลายทางไหนไม่อยู่ในรายการ ระบบก็ไม่ส่งไป แบบนี้ใครก็หลอกพา token ไปที่อื่นไม่ได้
ในรายการมีไว้ให้แล้วตั้งแต่แรก คือ path ที่ใช้กันบ่อยบน my-app.erawan.app อย่าง /auth/callback กับ /api/auth/callback และ localhost:3000 สำหรับตอนพัฒนา ถ้าแอปใช้ path อื่น พอร์ตอื่น หรือย้ายไปอยู่บนโดเมนของคุณเอง ก็เพิ่มเข้าไป
4. ให้หน้าล็อกอินเป็นภาษาไทย
หน้าล็อกอินที่ผู้ใช้เห็นตั้งให้เปิดมาเป็นภาษาไทยได้ และใส่ชื่อแอป สี กับโลโก้ของคุณเองได้ด้วย คำสั่งข้างล่างตั้งภาษาไทย ถ้าจะใส่ชื่อ สี หรือโลโก้ ก็เติม --name, --color หรือ --logo ต่อท้าย ส่วนสีที่เลือกได้ ดูด้วยคำสั่ง erawan auth theme show my-app
ถ้าล็อกอินแล้วมีปัญหา
- ผู้ใช้หลุดออกจากระบบทุกชั่วโมง แปลว่าแอปไม่ได้ขอ
offline_accessตอนพาผู้ใช้ไปล็อกอิน บอกเอไอให้เพิ่ม scope นี้ แอปจะได้ refresh token ไว้ต่ออายุเอง - ล็อกอินแล้วเจอ
invalid_clientแปลว่าแอปส่ง client secret มาใน header แบบ Basic แต่ระบบตั้งไว้ให้รับใน body ของคำขอ สั่งerawan auth method set my-app basicมีผลทันที ไม่ต้อง deploy ใหม่
สิ่งที่แอปของคุณไม่ต้องทำเลย
เก็บรหัสผ่าน แฮชรหัสผ่าน หรือส่งอีเมลรีเซ็ตรหัส เรื่องพวกนี้ไม่มาถึงแอปของคุณเลย และรหัสผ่านที่ไม่เคยอยู่ในฐานข้อมูลของคุณ ก็ไม่มีทางรั่วออกไปจากตรงนั้น
อยากรู้ว่ามีใครล็อกอินเข้ามาแล้วบ้าง ใช้คำสั่งนี้ ระบบปิดอีเมลและชื่อไว้บางส่วนเป็นค่าเริ่มต้น เพราะเป็นข้อมูลของผู้ใช้ ถ้าจำเป็นต้องเห็นเต็ม ๆ ค่อยเติม --unmask
พอมีผู้ใช้จริง ย้ายไปอยู่บนโดเมนของคุณ
ที่อยู่ erawan.app เหมาะกับเว็บทั่วไปและเดโม แต่แอปที่มีคนล็อกอินจริงควรอยู่บนโดเมนของคุณเอง เพราะเบราว์เซอร์จะนับโดเมนนั้นเป็นเว็บของคุณคนเดียว ไม่ปนกับแอปอื่นที่อยู่บน erawan.app ด้วยกัน วิธีทำอยู่ในบทใช้โดเมนของคุณเองกับ Erawan เริ่มที่แพ็กเกจ Hobby
ติดตามบทเรียนใหม่และข่าวจากเอราวัณ