แนะนำการใช้ AdonisJs + MongoDB สร้าง API สำหรับ Authentication ง่ายมาก ๆ

Karn Yongsiriwit
4 min readMar 2, 2021

--

บทความนี้ขอแนะนำการใช้ AdonisJs + MogoDB สร้าง API สำหรับ Authentication ง่ายมาก ๆ ครับ ไม่พูดเยอะนะครับ ขอเริ่มเลย 555

สำหรับ Source Code ที่ใช้ในบทความนี้ สามารถ clone มาได้เลยจาก GitHub ด้านล่างนี้นะครับ

Software Installation

สำหรับมือใหม่เลยนะครับ เริ่มต้นให้ติดตั้ง software ที่จำเป็นก่อนดังนี้ครับ

  • MongoDB Community ดาวน์โหลดและติดตั้งได้จาก https://www.mongodb.com/try/download/community
  • Postman สำหรับทดสอบ API https://www.postman.com/downloads/
  • Node.js ดาวน์โหลดได้จาก https://nodejs.org
  • AdonisJS เป็น Node.js web framework สามารถใช้สร้าง API ได้ โดยสามารถติดตั้งได้จากการใช้คำสั่งด้านล่างใน Command Prompt/Terminal
npm i -g @adonisjs/cli

สร้าง User ใน MongoDB

เฉพาะสำหรับ Windows นะครับ ให้ทำการ Set Environment Variables เพื่อให้สามารถเรียกคำสั่ง mongo ผ่าน Command Prompt ได้ ดูวิธีการดังรูปเลยครับ

จากนั้นเปิด Command Prompt หรือ Terminal ขึ้นมา และเรียกคำสั่ง mongo ตามด้านล่าง เพื่อเปิด shell ของ mongo

mongo --host localhost --port 27017

ป้อนคำสั่ง 2 คำสั่งตามด้านล่าง เพื่อสร้าง User myUserAdmin ที่มี Password เป็น myUserAdmin สำหรับใช้ในการให้โปรแกรมเข้ามาเชื่อมต่อกับ MongoDB

use admindb.createUser({user: "myUserAdmin", pwd: "myUserAdmin", roles: [{role: "userAdminAnyDatabase", db: "admin"}, "readWriteAnyDatabase"]})

ทดสอบว่า User ถูกสร้างเรียกร้อยแล้ว ด้วยคำสั่งด้านล่าง

db.getUsers()

สร้าง AdonisJS project

เรียกคำสั่ง adonis ตามด้านล่างเพื่อสร้าง AdonisJS project ขึ้นมา โดยหลัง new จะเป็นชื่อ project ที่สร้างขึ้น นั้นก็คือ adonis-mongodb-server

adonis new adonis-mongodb-server

cd เพื่อเข้าไปใน folder ที่สร้างขึ้นตามชื่อ project

cd adonis-mongodb-server

เรียกคำสั่ง adonis ด้านล่างเพื่อให้ตัว Web Application ของเรา start ขึ้นมา

adonis serve --dev

ทดสอบว่า Web Application สามารถใช้งานได้ โดยให้ใส่ http://127.0.0.1:3333/ ที่ Web Browser จะแสดงผลตามรูปด้านล่าง

AdonisJS + MongoDB

เพื่อให้ AdnoisJS สามารถเชื่อมต่อกับ MongoDB ได้ ให้ทำการติดตั้งตัวเสริม lucid-mongo เพิ่มเข้าไปใน project โดยเรียกคำสั่งด้านล่างภายใต้ folder project ของเรา

adonis install lucid-mongo

เพิ่มการใช้งาน lucid-mongo เข้าไปที่ start/app.js

แก้ไขไฟล์ .env ในส่วนของการเชื่อมต่อฐานข้อมูลดัง code ด้านล่าง

แก้ไขไฟล์ config/database.js เพื่อระบุถึงการเชื่อมต่อ MongoDB

แก้ไข้ไฟล์ config/cors.js

แก้ไข้ไฟล์ config/shield.js

API for User Register

ใช้คำสั่ง adonis ด้านล่างเพื่อสร้าง Controller ที่มีชื่อว่า User

adonis make:controller User --type http

แก้ไขไฟล์ app/Controllers/Http/UserController.js โดยเพิ่ม method register สำหรับรองรับ POST request เพื่อลงทะเบียน user ด้วย email, password, fname และ lname (มีการตรวจสอบ email user ซ้ำก่อนลงทะเบียนด้วย)

แก้ไขไฟล์ start/routes.js เพิ่ม route ส่วนของการ POST request /users/register โดย method register ของ UserController จะรับมือกับ request ดังกล่าว

ใช้ Postman เพื่อทดลอง API ที่สร้างขึั้น ตามด้านล่าง เมื่อเรียกใช้ API แล้ว User จะถูกสร้างขึ้น

{
"email": "karnyong@gmail.com",
"password": "1234",
"fname": "Karn",
"lname": "Yong"
}

ทดสอบดูว่ามีการสร้าง User เข้าไปใน MongoDB สำเร็จหรือไม่ ด้วย MongoDB Compass ที่จะมาพร้อมกับการติดตั้ง MongoDB Community โดยเปิดโปรแกรมให้ใส่ Username/Password ที่ตั้งไว้ข้างต้น

เลือก Database mydb จากนั้นเลือก Collection users

จะเห็นได้ว่า User มีการถูกสร้างขึ้น และ password มีการเข้ารหัสเรียบร้อย

API for User Login

แก้ไขไฟล์ app/Controllers/Http/UserController.js โดยเพิ่ม method login และ list เข้าไปใน UserController

แก้ไขไฟล์ config/auth.js เพื่อใช้ jwt สำหรับเป็น authenticator

แก้ไขไฟล์ start/routes.js โดยเพิ่ม route สำหรับ API ทั้ง 2 เส้น (login และ list)

ทดสอบ API เส้น login ด้วย Postman ตามด้านล่าง จากนั้นให้ copy ในส่วนของ token ไว้

ทดสอบ API เส้น list ตามรูปด้านล่าง จะเห็นได้ว่าการตอบกลับจะแจ้งว่าไม่มี jwt token แนบมากับ request

เลือก Authentication แล้วเลือก Type เป็น Bearer Token จากนั้นนำ token ที่ copy จากตอน login มาใส่ในช่อง Token ดังรูป แล้วลองเรียก API เส้นนี้อีกครั้ง จะได้ผลลัพธ์เป็นรายการของ User ที่มีอยู่

จบแล้วครับ สร้าง API ด้วย AdonisJS + MongoDB ง่ายมาก ๆ 555 ใครติดตรงใหนมาคุยกันได้ครับ

บทความโดย อ.ดร.กานต์ ยงศิริวิทย์
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต

--

--

Karn Yongsiriwit
Karn Yongsiriwit

Written by Karn Yongsiriwit

Lecturer at Digital Innovation Technology, Rangsit University

No responses yet