การใช้การตรวจสอบสิทธิ์ OAuth 2.0 ใน Node.js
ขั้นตอนที่ 1: ตั้งค่าโครงการ Node.js
เริ่มต้นด้วยการตั้งค่าโปรเจ็กต์ Node.js ใหม่โดยใช้ตัวจัดการแพ็คเกจ เช่น npm หรือเส้นด้าย รันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
csharpCopy code npm init
สิ่งนี้จะสร้างไฟล์ package.json
เพื่อจัดการการขึ้นต่อกันของโปรเจ็กต์ของคุณ
ขั้นตอนที่ 2: ติดตั้งแพ็คเกจที่จำเป็น
หากต้องการใช้การรับรองความถูกต้อง OAuth 2.0 ใน Node.js เราจำเป็นต้องติดตั้งแพ็คเกจที่จำเป็น รันคำสั่งต่อไปนี้ในเทอร์มินัลของคุณ:
Copy code npm install express passport passport-google-oauth20
การดำเนินการนี้จะติดตั้ง Express.js ซึ่งเป็นเฟรมเวิร์กเว็บ Node.js ยอดนิยม และแพ็คเกจ passport
และ passport-google-oauth20
ซึ่งจำเป็นสำหรับการตรวจสอบสิทธิ์ OAuth 2.0 กับ Google
ขั้นตอนที่ 3: สร้างข้อมูลรับรอง OAuth 2.0
ก่อนดำเนินการต่อ คุณต้องสร้างข้อมูลรับรอง OAuth 2.0 ในคอนโซลนักพัฒนาซอฟต์แวร์ของแพลตฟอร์มที่เกี่ยวข้อง ตัวอย่างเช่น หากคุณต้องการใช้ Google OAuth ให้ไปที่ Google Developers Console (**https://console.developers.google.com/**) สร้างโครงการใหม่และเปิดใช้งาน Google OAuth 2.0 API . รับรหัสไคลเอ็นต์และความลับไคลเอ็นต์สำหรับแอปพลิเคชันของคุณ
ขั้นตอนที่ 4: กำหนดค่า Passport.js
สร้างไฟล์ใหม่ passport.js
เพื่อกำหนดค่า Passport.js ซึ่งเป็นมิดเดิลแวร์การตรวจสอบสิทธิ์ยอดนิยมสำหรับ Node.js ในไฟล์นี้ ให้เริ่มต้น Passport.js ตั้งค่ากลยุทธ์ Google OAuth 2.0 และกำหนดฟังก์ชันการทำให้เป็นอนุกรมและการดีซีเรียลไลซ์
javascriptCopy code const passport = require('passport'); const GoogleStrategy = require('passport-google-oauth20').Strategy; passport.use( new GoogleStrategy( { clientID: 'YOUR_CLIENT_ID', clientSecret: 'YOUR_CLIENT_SECRET', callbackURL: '/auth/google/callback', }, (accessToken, refreshToken, profile, done) => { // Code to handle user authentication and retrieval } ) ); passport.serializeUser((user, done) => { // Code to serialize user data }); passport.deserializeUser((id, done) => { // Code to deserialize user data });
แทนที่ 'YOUR_CLIENT_ID'
และ 'YOUR_CLIENT_SECRET'
ด้วยข้อมูลรับรองของคุณเองที่ได้รับจากผู้ให้บริการ OAuth
ขั้นตอนที่ 5: สร้างเส้นทางการตรวจสอบสิทธิ์
สร้างไฟล์ใหม่ authRoutes.js
เพื่อกำหนดเส้นทางการรับรองความถูกต้องสำหรับแอปพลิเคชันของคุณ ในไฟล์นี้ ให้กำหนดเส้นทางสำหรับเริ่มต้นขั้นตอนการตรวจสอบสิทธิ์ OAuth 2.0 การจัดการ URL เรียกกลับ และออกจากระบบผู้ใช้
javascriptCopy code const express = require('express'); const passport = require('passport'); const router = express.Router(); // Initiates the Google OAuth 2.0 authentication flow router.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] })); // Callback URL for handling the OAuth 2.0 response router.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/login' }), (req, res) => { // Successful authentication, redirect or handle the user as desired res.redirect('/'); }); // Logout route router.get('/logout', (req, res) => { req.logout(); res.redirect('/'); }); module.exports = router;
ขั้นตอนที่ 6: ตั้งค่าเซิร์ฟเวอร์ Express.js
ในไฟล์เซิร์ฟเวอร์หลักของคุณ (เช่น app.js
) ให้นำเข้าแพ็คเกจที่จำเป็นและกำหนดค่าเซิร์ฟเวอร์ Express.js รวมมิดเดิลแวร์ Passport.js การจัดการเซสชัน และเส้นทางการตรวจสอบสิทธิ์
javascriptCopy code const express = require('express'); const session = require('express-session'); const passport = require('passport'); const authRoutes = require('./authRoutes'); const app = express(); app.use(session({ secret: 'YOUR_SESSION_SECRET', resave: false, saveUninitialized: false })); app.use(passport.initialize()); app.use(passport.session()); app.use('/', authRoutes); // Start the server app.listen(3000, () => { console.log('Server started on port 3000'); });
แทนที่ 'YOUR_SESSION_SECRET'
ด้วยสตริงลับที่ใช้ในการลงนามคุกกี้ ID เซสชัน
ขั้นตอนที่ 7: การทดสอบขั้นตอนการตรวจสอบสิทธิ์
เริ่มต้นเซิร์ฟเวอร์ Node.js ของคุณโดยใช้ node app.js
หรือคำสั่งที่เหมาะสม ไปที่เส้นทางที่เหมาะสม (เช่น /auth/google
) ในเว็บเบราว์เซอร์ของคุณเพื่อเริ่มต้นขั้นตอนการตรวจสอบสิทธิ์ OAuth 2.0 หลังจากการรับรองความถูกต้องสำเร็จ คุณจะถูกนำไปยัง URL ติดต่อกลับ (/auth/google/callback
) พร้อมข้อมูลผู้ใช้ จากนั้นคุณสามารถจัดการข้อมูลนี้ได้ตามต้องการ เช่น การจัดเก็บในฐานข้อมูลหรือการสร้างเซสชันผู้ใช้
หากคุณมีคำถามหรือข้อเสนอแนะ โปรดแจ้งให้เราทราบใน "Instagram" ของฉันหรือที่ [email protected]