ทำไมคุณอาจเจอ 404 เมื่อเข้าสู่ระบบแอปที่ผสาน Logto
คุณเคยเจอข้อผิดพลาด "404 Not Found" เมื่อคุณพยายามเข้าสู่ระบบแอปที่ผสาน Logto ไหม? บล็อกโพสต์นี้จะอธิบายว่าทำไมมันถึงเกิดขึ้นและคุณจะป้องกันอย่างไรได้บ้าง
พื้นหลัง
คุณเคยพยายามเข้าสู่ระบบแอปที่ใช้ Logto เพื่อยืนยันตัวตนแล้วเจอกับข้อผิดพลาด "404 not found" หรือเปล่า? ผู้ใช้ของคุณเคยรายงานปัญหาเดียวกันนี้หรือไม่?

ปัญหานี้เกิดขึ้นเมื่อคุณเข้าถึงหน้าลงชื่อเข้าใช้โดยตรง (เช่น https://your-app.com/sign-in
) โดยไม่ผ่านกระบวนการเข้าสู่ระบบที่ถูกตั้งใจไว้ของแอปของคุณ
เหตุผลมีดังนี้:
ความสำคัญของ OIDC flow
Logto ใช้ OpenID Connect (OIDC) protocol ในการยืนยันตัวตนที่ปลอดภัย เมื่อคุณเข้าสู่ระบบผ่านกระบวนการปกติของแอปพลิเคชัน (โดยทั่วไปคือคลิกที่ปุ่ม Sign in จากแอปของคุณ) แอปจะเริ่มการสื่อสารกับ OIDC server ของ Logto การสื่อสารที่เรียกว่า “authorization request” นี้สำคัญมาก เพราะมันจะทำการตรวจสอบหลายอย่างกับผู้เรียกก่อน และสร้าง session ที่ปลอดภัยระหว่างเบราว์เซอร์ของคุณกับเซิร์ฟเวอร์ (โดยบริหารผ่านคุกกี้)
ปัญหาเกิดขึ้นเมื่อผู้ใช้เข้ามาที่หน้า “/sign-in” โดยตรง ซึ่งเป็นการข้าม logic ภายในแอปที่ใช้ในการ trigger OIDC authorization request ดังนั้นเซิร์ฟเวอร์จะไม่รับรู้ว่าเบราว์เซอร์ของคุณมี session ที่ถูกต้องอยู่ ส่งผลให้เกิดข้อผิดพลาด 404
ทางออก
มีวิธีหลีกเลี่ยงปัญหานี้อยู่ 2 วิธีหลัก ๆ:
ใช้ปุ่มเข้าสู่ระบบของแอปเสมอ
ให้หลีกเลี่ยงการเข้าถึงหน้า "/sign-in" โดยตรง ให้ทำตาม flow การเข้าสู่ระบบที่แอปกำหนดไว้ เมื่อคุณกดปุ่ม "Sign in" ในแอป มันจะเริ่ม OIDC authorization request ที่ถูกต้อง และสร้าง session ที่จำเป็น
เปลี่ยนเส้นทางผู้ใช้อัตโนมัติ
ถ้าคุณมีแอปเดียวใน Logto instance ของคุณ คุณอาจใส่ logic เพื่อ intercept การเข้า "/sign-in" ที่ไม่มี session ที่ถูกต้อง และเปลี่ยนเส้นทางกลับไปยังหน้าหลักที่มีปุ่ม sign-in แสดงอยู่
เพื่อรองรับกรณีนี้ Logto เพิ่มตัวเลือก “Unknown session redirect URL” เมื่อคุณกำหนด URL นี้ Logto จะเปลี่ยนเส้นทางผู้ใช้ไปยังหน้านั้นแทนการแสดงข้อผิดพลาด 404 เช่น คุณอาจเปลี่ยนเส้นทางไปยังหน้าแรกของแอป หรือหน้าล็อกอินที่ปรับแต่งเอง หลังเปลี่ยนเส้นทาง แอป client ของคุณควรเริ่ม flow เข้าสู่ระบบใหม่
ในการตั้งค่า ให้ไปที่ Logto Console ที่ Logto Cloud > Sign-in experience > Sign-up and sign-in > Advanced options แล้วใส่ fallback URL ของคุณ
ตัวอย่างเช่น Logto Cloud ตั้งค่านี้ไว้ที่ https://cloud.logto.io/
ผู้ใช้ที่เข้าหน้า /sign-in
โดยที่ไม่มี session ที่ถูกต้องจะถูกส่งไปยัง URL นั้นเพื่อเริ่มการยืนยันตัวตนใหม่
ข้อคิดเพิ่มเติมเกี่ยวกับการปรับปรุงประสบการณ์ผู้ใช้
เรากำลังพยายามปรับปรุง user experience อย่างน้อยโดยเพิ่มข้อความแนะนำที่หน้าถาม "unknown-session" เพื่ออธิบายสาเหตุของ 404 และแจ้งผู้ใช้ว่าควรทำอะไรต่อ แทนที่จะปล่อยให้ผู้ใช้งง ๆ ตัวอย่างเช่น Logto รองรับการกำหนดอีเมลและเว็บไซต์สนับสนุนสำหรับหน้าข้อผิดพลาดของ sign-in เมื่อผู้ใช้เจอปัญหาจะเห็นข้อมูลติดต่อของคุณและสามารถติดต่อขอความช่วยเหลือได้ทันที
เรายังอาจพิจารณามาตรการอื่นที่ปลอดภัย เช่น redirect ไปที่ "Sign-out redirect URI" (โดยปกติคือหน้าหลักของแอปพลิเคชัน) อัตโนมัติเมื่อเจอ Logto instance ที่มีแอปเดียว หรือเพิ่มการตั้งค่าเพื่อแสดงข้อความที่กำหนดเองได้ในกรณีนี้
สรุป
ข้อผิดพลาด 404 not found (invalid session) ในหน้า "/sign-in" มักเกิดจากการเข้ามาที่ URL หน้านี้โดยตรง ซึ่งเป็นการข้ามกระบวนการเข้าสู่ระบบของแอปพลิเคชันที่ควรจะ trigger การขอ authorization จึงไม่มีการสร้าง session (โดยคุกกี้) ที่สมบูรณ์
เมื่อเข้าใจ flow และความสำคัญตรงนี้ คุณจะสามารถหลีกเลี่ยงข้อผิดพลาดนี้และใช้งานแอปที่ผสาน Logto ได้อย่างราบรื่น
ถ้ามีข้อเสนอแนะหรือต้องการแบ่งปันไอเดียกับเรา ติดต่อเข้ามาได้เลย