แนะนำการใช้ AdonisJs + MongoDB สร้าง API สำหรับ Authentication ง่ายมาก ๆ
บทความนี้ขอแนะนำการใช้ 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 ใครติดตรงใหนมาคุยกันได้ครับ
บทความโดย อ.ดร.กานต์ ยงศิริวิทย์
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต