ข้ามไปยังเนื้อหาหลัก
สำหรับเพื่อนใหม่ของเรา:

Logto คือทางเลือกแทน Auth0 ที่ออกแบบมาสำหรับแอปและผลิตภัณฑ์ SaaS ยุคใหม่ โดยมีทั้งบริการ Cloud และ Open-source เพื่อช่วยให้คุณเปิดตัวระบบการจัดการเอกลักษณ์และการเข้าถึง (IAM) ได้อย่างรวดเร็ว สนุกกับการยืนยันตัวตน (การยืนยันตัวตน), การอนุญาต (การอนุญาต), และการจัดการหลายผู้เช่า ครบจบในที่เดียว

เราแนะนำให้เริ่มต้นด้วย tenant สำหรับการพัฒนาแบบฟรีบน Logto Cloud เพื่อให้คุณสามารถสำรวจฟีเจอร์ทั้งหมดได้อย่างง่ายดาย

ในบทความนี้ เราจะพาคุณไปทีละขั้นตอนเพื่อสร้างประสบการณ์ลงชื่อเข้าใช้ X (Twitter) (การยืนยันตัวตนของผู้ใช้) อย่างรวดเร็วด้วย Vanilla JS และ Logto

ข้อกำหนดเบื้องต้น

  • มี Logto instance ที่พร้อมใช้งาน ดู หน้าแนะนำ เพื่อเริ่มต้นใช้งาน
  • มีความรู้พื้นฐานเกี่ยวกับ Vanilla JS
  • มีบัญชี X (Twitter) ที่ใช้งานได้

สร้างแอปพลิเคชันใน Logto​

Logto สร้างขึ้นบนพื้นฐานของการยืนยันตัวตน OpenID Connect (OIDC) และการอนุญาต OAuth 2.0 โดยรองรับการจัดการข้อมูลระบุตัวตนแบบรวมศูนย์ข้ามหลายแอปพลิเคชัน ซึ่งมักเรียกว่า การลงชื่อเข้าใช้ครั้งเดียว (Single Sign-On; SSO)

ในการสร้างแอปพลิเคชัน แอปหน้าเดียว (Single page app) ของคุณ เพียงทำตามขั้นตอนเหล่านี้:

  1. เปิด Logto Console ในส่วน "เริ่มต้นใช้งาน" ให้คลิกที่ลิงก์ "ดูทั้งหมด" เพื่อเปิดรายการเฟรมเวิร์กของแอปพลิเคชัน หรือคุณสามารถไปที่ Logto Console > Applications แล้วคลิกปุ่ม "สร้างแอปพลิเคชัน" Get started
  2. ในหน้าต่างที่เปิดขึ้น ให้คลิกที่ส่วน "แอปหน้าเดียว (Single page app)" หรือกรองเฟรมเวิร์ก "แอปหน้าเดียว (Single page app)" ทั้งหมดที่มีโดยใช้ช่องกรองด่วนทางซ้ายมือ จากนั้นคลิกที่การ์ดเฟรมเวิร์ก "Vanilla JS" เพื่อเริ่มสร้างแอปพลิเคชันของคุณ Frameworks
  3. กรอกชื่อแอปพลิเคชัน เช่น "Bookstore" แล้วคลิก "สร้างแอปพลิเคชัน"

🎉 เยี่ยมมาก! คุณเพิ่งสร้างแอปพลิเคชันแรกของคุณใน Logto คุณจะเห็นหน้าข้อความแสดงความยินดีซึ่งมีคู่มือการเชื่อมต่ออย่างละเอียด ให้ทำตามคู่มือเพื่อดูประสบการณ์ที่จะเกิดขึ้นในแอปพลิเคชันของคุณ

ผสานรวม Vanilla JS กับ Logto​

เคล็ดลับ:
  • vanilla-js SDK เป็น framework-agnostic คุณสามารถใช้กับเฟรมเวิร์กฝั่งหน้าเว็บใดก็ได้โดยเขียนตัวห่อ (wrapper) ให้เหมาะสม
  • โปรเจกต์ตัวอย่างมีให้ใน SDK repository ของเรา

การติดตั้ง​

เลือกตัวจัดการแพ็กเกจที่คุณชื่นชอบ หรือใช้ CDN เพื่อติดตั้ง Logto Browser SDK

npm i @logto/browser

เริ่มต้น LogtoClient​

นำเข้าและเริ่มต้นอินสแตนซ์ LogtoClient โดยส่ง config เข้าไป:

index.js
import LogtoClient from '@logto/browser';

const logtoClient = new LogtoClient({
endpoint: '<your-logto-endpoint>',
appId: '<your-application-id>',
});

คุณสามารถค้นหา endpoint และ appId ได้จากหน้ารายละเอียดแอปพลิเคชันใน Logto Console

สร้างฟังก์ชันลงชื่อเข้าใช้และออกจากระบบ​

กำหนดค่า redirect URIs​

ก่อนที่เราจะลงลึกในรายละเอียด นี่คือภาพรวมประสบการณ์ของผู้ใช้ปลายทาง กระบวนการลงชื่อเข้าใช้สามารถสรุปได้ดังนี้:

  1. แอปของคุณเรียกใช้งานเมธอดลงชื่อเข้าใช้
  2. ผู้ใช้จะถูกเปลี่ยนเส้นทางไปยังหน้าลงชื่อเข้าใช้ของ Logto สำหรับแอปเนทีฟ ระบบจะเปิดเบราว์เซอร์ของระบบ
  3. ผู้ใช้ลงชื่อเข้าใช้และถูกเปลี่ยนเส้นทางกลับไปยังแอปของคุณ (ตามที่กำหนดไว้ใน redirect URI)

เกี่ยวกับการลงชื่อเข้าใช้แบบเปลี่ยนเส้นทาง (redirect-based sign-in)​

  1. กระบวนการยืนยันตัวตนนี้เป็นไปตามโปรโตคอล OpenID Connect (OIDC) และ Logto บังคับใช้มาตรการรักษาความปลอดภัยอย่างเข้มงวดเพื่อปกป้องการลงชื่อเข้าใช้ของผู้ใช้
  2. หากคุณมีหลายแอป คุณสามารถใช้ผู้ให้บริการข้อมูลระบุตัวตน (Logto) เดียวกันได้ เมื่อผู้ใช้ลงชื่อเข้าใช้แอปหนึ่งแล้ว Logto จะดำเนินการลงชื่อเข้าใช้โดยอัตโนมัติเมื่อผู้ใช้เข้าถึงแอปอื่น

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับเหตุผลและประโยชน์ของการลงชื่อเข้าใช้แบบเปลี่ยนเส้นทาง โปรดดูที่ อธิบายประสบการณ์การลงชื่อเข้าใช้ของ Logto


บันทึก:

ในตัวอย่างโค้ดต่อไปนี้ เราถือว่าแอปของคุณกำลังทำงานอยู่ที่ http://localhost:3000/

กำหนดค่า Redirect URI​

ไปที่หน้ารายละเอียดแอปพลิเคชันใน Logto Console เพิ่ม redirect URI http://localhost:3000/callback

Redirect URI in Logto Console

เช่นเดียวกับการลงชื่อเข้าใช้ ผู้ใช้ควรถูกเปลี่ยนเส้นทางไปที่ Logto เพื่อออกจากเซสชันที่ใช้ร่วมกัน เมื่อเสร็จสิ้นแล้ว ควรเปลี่ยนเส้นทางผู้ใช้กลับไปยังเว็บไซต์ของคุณ ตัวอย่างเช่น เพิ่ม http://localhost:3000/ ในส่วน post sign-out redirect URI

จากนั้นคลิก "Save" เพื่อบันทึกการเปลี่ยนแปลง

จัดการ redirect​

ยังมีขั้นตอนที่ต้องดำเนินการหลังจากที่ผู้ใช้ถูกเปลี่ยนเส้นทางกลับมายังแอปพลิเคชันของคุณจาก Logto มาจัดการขั้นตอนนี้อย่างถูกต้องกัน

pages/Callback.js
const callbackHandler = async (logtoClient) => {
await logtoClient.handleSignInCallback(window.location.href);

if (!logtoClient.isAuthenticated) {
// จัดการกรณีลงชื่อเข้าใช้ไม่สำเร็จ
alert('ลงชื่อเข้าใช้ไม่สำเร็จ');
return;
}

// จัดการกรณีลงชื่อเข้าใช้สำเร็จ
window.location.assign('/');
};

สร้างฟังก์ชันลงชื่อเข้าใช้และออกจากระบบ​

logtoClient มีเมธอด signIn และ signOut เพื่อช่วยให้คุณจัดการกระบวนการการยืนยันตัวตน (Authentication) ได้อย่างง่ายดาย

บันทึก:

ก่อนเรียก .signIn() โปรดตรวจสอบให้แน่ใจว่าคุณได้กำหนดค่า Redirect URI ใน Admin Console อย่างถูกต้องแล้ว

pages/Home.js
const isAuthenticated = await logtoClient.isAuthenticated();

// ฟังก์ชันสำหรับคลิกปุ่มลงชื่อเข้าใช้
const onClickSignIn = () => {
logtoClient.signIn('http://localhost:3000/callback');
};
// ฟังก์ชันสำหรับคลิกปุ่มออกจากระบบ
const onClickSignOut = () => {
logtoClient.signOut('http://localhost:3000');
};

const button = document.createElement('button');
button.innerHTML = isAuthenticated ? 'Sign Out' : 'Sign In';
button.addEventListener('click', isAuthenticated ? onClickSignOut : onClickSignIn);

document.body.appendChild(button);

การเรียกใช้ .signOut() จะล้างข้อมูล Logto ทั้งหมดในหน่วยความจำและ localStorage หากมีอยู่

จัดการสถานะการยืนยันตัวตน​

ใน Logto SDK โดยทั่วไปเราสามารถใช้ logtoClient.isAuthenticated เพื่อตรวจสอบสถานะการยืนยันตัวตน (authentication) หากผู้ใช้ลงชื่อเข้าใช้แล้ว ค่านี้จะเป็น true หากยังไม่ได้ลงชื่อเข้าใช้ ค่านี้จะเป็น false

ในแอป vanilla JS ของคุณ คุณสามารถใช้สถานะ isAuthenticated เพื่อแสดงหรือซ่อนปุ่มลงชื่อเข้าใช้และลงชื่อออกแบบอัตโนมัติ มาดูวิธีการทำกัน

const redirectUrl = 'http://localhost:3000/callback';
const baseUrl = 'http://localhost:3000';

// การแสดงผลปุ่มลงชื่อเข้าใช้และลงชื่อออกแบบมีเงื่อนไข
const render = async (logtoClient) => {
const isAuthenticated = await logtoClient.isAuthenticated();
const container = document.querySelector('#container');

const onClickSignIn = () => logtoClient.signIn(redirectUrl);
const onClickSignOut = () => logtoClient.signOut(baseUrl);

const button = document.createElement('button');
button.innerHTML = isAuthenticated ? 'Sign Out' : 'Sign In';
button.addEventListener('click', isAuthenticated ? onClickSignOut : onClickSignIn);

container.append(button);
};

จุดตรวจสอบ: ทดสอบแอปพลิเคชันของคุณ​

ตอนนี้คุณสามารถทดสอบแอปพลิเคชันของคุณได้แล้ว:

  1. รันแอปพลิเคชันของคุณ คุณจะเห็นปุ่มลงชื่อเข้าใช้
  2. คลิกปุ่มลงชื่อเข้าใช้ SDK จะเริ่มกระบวนการลงชื่อเข้าใช้และเปลี่ยนเส้นทางคุณไปยังหน้าลงชื่อเข้าใช้ของ Logto
  3. หลังจากที่คุณลงชื่อเข้าใช้แล้ว คุณจะถูกเปลี่ยนเส้นทางกลับไปยังแอปพลิเคชันของคุณและเห็นปุ่มลงชื่อออก
  4. คลิกปุ่มลงชื่อออกเพื่อเคลียร์ที่เก็บโทเค็นและออกจากระบบ

เพิ่มตัวเชื่อมต่อ X (Twitter)​

เพื่อเปิดใช้งานการลงชื่อเข้าใช้อย่างรวดเร็วและเพิ่มอัตราการเปลี่ยนผู้ใช้ ให้เชื่อมต่อกับ Vanilla JS ในฐานะผู้ให้บริการข้อมูลระบุตัวตน (Identity provider) ตัวเชื่อมต่อโซเชียลของ Logto ช่วยให้คุณสร้างการเชื่อมต่อนี้ได้ภายในไม่กี่นาที โดยสามารถกรอกพารามิเตอร์ได้หลายค่า

ในการเพิ่มตัวเชื่อมต่อโซเชียล ให้ทำตามขั้นตอนดังนี้:

  1. ไปที่ Console > Connectors > Social Connectors
  2. คลิก "Add social connector" และเลือก "X (Twitter)"
  3. ทำตามคู่มือ README กรอกข้อมูลที่จำเป็น และปรับแต่งการตั้งค่า
Connector tab
บันทึก:

หากคุณกำลังทำตามคู่มือ Connector แบบ in-place คุณสามารถข้ามส่วนถัดไปได้

ตั้งค่า X OAuth app​

สร้างแอปใน X Developer Portal​

ไปที่ X Developer Portal และลงชื่อเข้าใช้ด้วยบัญชี X ของคุณ หากยังไม่มีบัญชี คุณสามารถลงทะเบียนได้

จากนั้น สร้างแอปของคุณ

ขั้นตอนที่ 1: ไปยังส่วนสร้างแอป

เมื่อเข้าสู่ระบบแล้ว ให้ไปที่ส่วน "Projects & Apps" และคลิก "Create App" (หรือ "New App" ขึ้นอยู่กับหน้าตาอินเทอร์เฟซ)

ขั้นตอนที่ 2: กรอกรายละเอียดแอป

กรอกแบบฟอร์มด้วยข้อมูลต่อไปนี้:

  • App Name: ระบุชื่อแอปพลิเคชันที่ไม่ซ้ำและสื่อความหมาย
  • Application Description: (ไม่บังคับ) เพิ่มคำอธิบายสั้น ๆ ว่าแอปของคุณทำอะไร
  • Website URL: ใส่ URL หน้าแรกของแอปพลิเคชันของคุณ
  • Callback URL / Redirect URI: ในกรณีนี้จะเป็น ${your_logto_endpoint}/callback/${connector_id} เช่น https://foo.logto.app/callback/${connector_id} โดย connector_id สามารถดูได้ที่แถบด้านบนของหน้ารายละเอียดตัวเชื่อมต่อใน Logto Admin Console

ขั้นตอนที่ 3: เลือกสิทธิ์ (permissions) และขอบเขต (scopes)

เลือกสิทธิ์ที่แอปของคุณต้องการ สำหรับการเข้าสู่ระบบโซเชียลผ่าน X ให้แน่ใจว่าได้เปิดใช้งานขอบเขตที่จำเป็นคือ tweet.read และ users.read

ขั้นตอนที่ 4: บันทึกแอปของคุณ

คลิก "Create" หรือ "Save" เพื่อบันทึกและลงทะเบียนแอปของคุณ

หลังจากสร้างเสร็จ ให้ไปที่ส่วน "Keys and tokens" ของแอปเพื่อดึง OAuth 2.0 Client ID และ Client Secret ของคุณ

กำหนดค่าตัวเชื่อมต่อของคุณ​

ในหน้ากำหนดค่าตัวเชื่อมต่อ Logto ของคุณ ให้กรอกข้อมูลในช่องต่อไปนี้ด้วยค่าที่ได้จากหน้า "Keys and tokens" ของแอปในส่วน "OAuth 2.0 Client ID and Client Secret":

  • clientId: Client ID ของแอปของคุณ
  • clientSecret: Client Secret ของแอปของคุณ

scope คือรายการ ขอบเขต (scopes) ที่คั่นด้วยช่องว่าง หากไม่ได้ระบุไว้ ขอบเขตเริ่มต้นคือ tweet.read users.read

ประเภทของการกำหนดค่า​

NameType
clientIdstring
clientSecretstring
scopestring

บันทึกการตั้งค่าของคุณ​

โปรดตรวจสอบให้แน่ใจว่าคุณได้กรอกค่าที่จำเป็นในพื้นที่การตั้งค่าตัวเชื่อมต่อ Logto เรียบร้อยแล้ว คลิก "บันทึกและเสร็จสิ้น" (หรือ "บันทึกการเปลี่ยนแปลง") และตัวเชื่อมต่อ X (Twitter) ควรพร้อมใช้งานแล้ว

เปิดใช้งานตัวเชื่อมต่อ X (Twitter) ในประสบการณ์การลงชื่อเข้าใช้​

เมื่อคุณสร้างตัวเชื่อมต่อโซเชียลสำเร็จแล้ว คุณสามารถเปิดใช้งานเป็นปุ่ม "ดำเนินการต่อด้วย X (Twitter)" ในประสบการณ์การลงชื่อเข้าใช้ (Sign-in Experience) ได้

  1. ไปที่ Console > ประสบการณ์การลงชื่อเข้าใช้ > สมัครและลงชื่อเข้าใช้
  2. (ไม่บังคับ) เลือก "ไม่เกี่ยวข้อง" สำหรับตัวระบุการสมัคร หากคุณต้องการเฉพาะการเข้าสู่ระบบโซเชียล
  3. เพิ่มตัวเชื่อมต่อ X (Twitter) ที่ตั้งค่าไว้แล้วในส่วน "เข้าสู่ระบบโซเชียล" (Social sign-in)
แท็บประสบการณ์การลงชื่อเข้าใช้ (Sign-in Experience tab)

การทดสอบและการตรวจสอบความถูกต้อง​

กลับไปที่แอป Vanilla JS ของคุณ ตอนนี้คุณควรจะสามารถลงชื่อเข้าใช้ด้วย X (Twitter) ได้แล้ว ขอให้สนุก!

อ่านเพิ่มเติม​

กระบวนการสำหรับผู้ใช้ปลายทาง: Logto มีโฟลว์การยืนยันตัวตนสำเร็จรูปพร้อมใช้งาน รวมถึง MFA และ Enterprise SSO พร้อม API อันทรงพลังสำหรับการปรับแต่งการตั้งค่าบัญชี การตรวจสอบความปลอดภัย และประสบการณ์แบบหลายผู้เช่า (multi-tenant) ได้อย่างยืดหยุ่น

การอนุญาต (Authorization): การอนุญาต (Authorization) กำหนดว่าผู้ใช้สามารถทำอะไรหรือเข้าถึงทรัพยากรใดได้บ้างหลังจากได้รับการยืนยันตัวตนแล้ว สำรวจวิธีปกป้อง API ของคุณสำหรับแอปเนทีฟและแอปหน้าเดียว (SPA) และการใช้งานการควบคุมการเข้าถึงตามบทบาท (RBAC)

องค์กร (Organizations): ฟีเจอร์องค์กรมีประสิทธิภาพอย่างยิ่งใน SaaS แบบหลายผู้เช่าและแอป B2B โดยช่วยให้สร้างผู้เช่า จัดการสมาชิก RBAC ระดับองค์กร และ Just-in-Time Provisioning ได้

ชุดบทความ Customer IAM: บทความต่อเนื่องเกี่ยวกับการจัดการข้อมูลระบุตัวตนและการเข้าถึงของลูกค้า (Customer IAM) ตั้งแต่ระดับพื้นฐาน 101 ไปจนถึงหัวข้อขั้นสูงและอื่น ๆ