Nội dung bài viết
Video học lập trình mỗi ngày
Đăng nhập một hệ thống có thể dựa vào nhiều bên thứ ba như Facebook và Google ưu điểm nhanh gọn, thông tin chính xác nhưng tích hợp thế nào khi chúng ta đang sử dụng Node.js
Quy trình xác thực Facebook and Google sử dụng passport trong Node.js
Trong ví dụ này, chúng ta đang sử dụng thư viện passport
để tích hợp Google và Facebook trong kiến trúc này. Quy trình như sau: Để xác thực với Google, chúng tôi chuyển hướng người dùng đến trang đăng nhập Google OAuth2
và yêu cầu quyền truy cập hồ sơ của người dùng. Sau khi người dùng cấp quyền, Google sẽ chuyển hướng người dùng trở lại ứng dụng của chúng tôi bằng mã thông báo truy cập (accessToken).
Sau đó, chúng tôi có thể sử dụng accessToken
để lấy profile
của người dùng và lưu profile
đó vào cơ sở dữ liệu. Quá trình xác thực với Facebook cũng tương tự. Tôi hy vọng ví dụ này giúp bạn hiểu cách tích hợp với các dịch vụ xác thực của bên thứ ba trong Node.js
.
Thực hành xác thực Facebook and Google với passport
Còn đây là mã code:
const express = require('express');
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const FacebookStrategy = require('passport-facebook').Strategy;
const app = express();
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: '/auth/google/callback'
}, (accessToken, refreshToken, profile, cb) => {
// Save the user's profile to the database or create a new user
// Then call the callback function with the user's information
cb(null, user);
}));
passport.use(new FacebookStrategy({
clientID: process.env.FACEBOOK_APP_ID,
clientSecret: process.env.FACEBOOK_APP_SECRET,
callbackURL: '/auth/facebook/callback'
}, (accessToken, refreshToken, profile, cb) => {
// Save the user's profile to the database or create a new user
// Then call the callback function with the user's information
cb(null, user);
}));
app.get('/auth/google', passport.authenticate('google', {
scope: ['profile']
}));
app.get('/auth/google/callback', passport.authenticate('google', {
successRedirect: '/',
failureRedirect: '/login'
}));
app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/callback', passport.authenticate('facebook', {
successRedirect: '/',
failureRedirect: '/login'
}));
app.listen(3000, () => {
console.log('Server listening on port 3000');
});
Xin chào!