در این آموزش قصد داریم نحوه پیاده سازی سیستم احراز هویت لاگین گوگل در node.js با استفاده از passport js را آموزش دهیم.
مرحله 1: نصب کتابخانه ها
مرحله 2: قرار دادن مسیرها در app.js
مرحله 3: ایجاد نما
مرحله 4: را راه اندازی سرور
قبل از شروع آموزش باید api خود در حساب گوگل ایجاد کنیم برای این کار به این لینک مراجعه کنید و اقدامات زیر را اجرا کنید:
1 از منوی کشویی پروژه، یک پروژه موجود را انتخاب کنید یا با انتخاب ایجاد یک پروژه جدید، یک پروژه جدید ایجاد کنید.
2 در نوار کناری زیر <<APIs & Services>> را انتخاب کنید
3 در تب Credentials لیست کشویی Create credentials را انتخاب و شناسه مشتری OAuth را انتخاب کنید.
4 در قسمت Web application>> Application type>> را انتخاب کنید.
5 در قسمت URI تغییر مسیر مجاز از http://127.0.0.1:3000/auth/google/callback استفاده کنید.
6 دکمه Create را فشار دهید و شناسه مشتری و راز مشتری ایجاد شده را کپی کنید.
مرحله اول نصب کتابخانه ها
در این مرحله برای ایجاد دایرکتوری دستور زیر را در ترمینال اجرا کنید:
mkdir google_auth
پس از باز کردن دایرکتوری google_auth با هر ویرایشگر متنی، cmd خود را باز کنید و دستور زیر را اجرا کنید:
cd google_auth
اکنون برای نصب express ،ejs ،express-session و passport دستور زیر را در ترمینال اجرا کنید:
npm init -y npm install express ejs express-session passport passport-google-oauth --save
مرحله دوم قرار دادن مسیرها در app.js
در این مرحله باید یک فایل app.js در پوشه اصلی اپلیکیشن خود ایجاد کنید و کد زیر را اضافه کنید:
// app.js /* EXPRESS */ const express = require('express'); const app = express(); const session = require('express-session'); const GOOGLE_CLIENT_ID = ' '; //Client ID const const GOOGLE_CLIENT_SECRET = ' '; //Client secret app.set('view engine', 'ejs'); app.use(session({ resave: false, saveUninitialized: true, secret: 'SECRET' })); app.get('/', function(req, res) { res.render('pages/auth/login'); }); const port = process.env.PORT || 3000; app.listen(port , () => console.log('App listening on port ' + port));
کد بالا وب سرور ما را راه اندازی می کند.
در کد بالا دو متغیر وجود دارد به نام های GOOGLE_CLIENT_ID و GOOGLE_CLIENT_SECRET. مقادیر این دو متغیر را باید با توکن هایی که در زمان ساخت API دریافت کردید، پر کنید.
اکنون کد مربوط به پاسپورت را در پایین فایل app.js اضافه کنید:
var userProfile; app.use(passport.initialize()); app.use(passport.session()); app.get('/success', (req, res) => { res.render("pages/auth/success",{user:userProfile}) }); app.get('/error', (req, res) => res.send("error logging in")); passport.serializeUser(function (user, cb) { cb(null, user); }); passport.deserializeUser(function (obj, cb) { cb(null, obj); });
برای پیاده سازی Google Authentication در برنامه، کد زیر را در ادامه فایل app.js خود اضافه کنید
// app.js /* Google AUTH */ passport.use(new GoogleStrategy({ clientID: GOOGLE_CLIENT_ID, clientSecret: GOOGLE_CLIENT_SECRET, callbackURL: "http://localhost:3000/auth/google/callback" }, function(accessToken, refreshToken, profile, done) { userProfile=profile; return done(null, userProfile); } )); app.get('/auth/google', passport.authenticate('google', { scope : ['profile', 'email'] })); app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/error' }), function(req, res) { // Successful authentication, redirect success. res.redirect('/success'); });
کد نهایی فایل app.js به صورت زیر است:
const express = require('express'); const app = express(); const session = require('express-session'); const passport = require('passport'); const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy; const GOOGLE_CLIENT_ID = ''; const GOOGLE_CLIENT_SECRET = ''; app.set('view engine', 'ejs'); app.use(session({ resave: false, saveUninitialized: true, secret: 'SECRET' })); app.get('/', function (req, res) { res.render('pages/auth/login'); }); var userProfile; app.use(passport.initialize()); app.use(passport.session()); app.get('/success', (req, res) => { res.render("pages/auth/success",{user:userProfile}) }); app.get('/error', (req, res) => res.send("error logging in")); passport.serializeUser(function (user, cb) { cb(null, user); }); passport.deserializeUser(function (obj, cb) { cb(null, obj); }); passport.use(new GoogleStrategy({ clientID: GOOGLE_CLIENT_ID, clientSecret: GOOGLE_CLIENT_SECRET, callbackURL: "http://127.0.0.1:3000/auth/google/callback" }, function (accessToken, refreshToken, profile, done) { userProfile = profile; return done(null, userProfile); } )); app.get('/auth/google', passport.authenticate('google', { scope: ['profile', 'email'] })); app.get('/auth/google/callback', passport.authenticate('google', { failureRedirect: '/error' }), function (req, res) { // Successful authentication, redirect success. res.redirect('/success'); }); const port = process.env.PORT || 3000; app.listen(port, () => console.log('App listening on port ' + port));
مرحله 3: ایجاد نما
در این مرحله باید یک پوشه به نام views ایجاد کنید و در آن یک پوشه به نام pages و در داخل یک پوشه به نام auth ایجاد کنید.
در پوشه auth دو فایل به نام های زیر ایجاد کنید:
1 login.ejs
2 success.ejs
برای فایل login.ejs دستورات زیر را وارد کنید.
این فایل login.ejs حاوی فرم ورود است.
<!doctype html> <html> <head> <title>Google SignIn</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <style> body { padding-top:70px; } </style> </head> <body> <div class="container"> <div class="jumbotron text-center text-primary"> <h1><span class="fa fa-lock"></span> Social Authentication</h1> <p>Login or Register with:</p> <a href="/auth/google" class="btn btn-danger"><span class="fa fa-google"></span> SignIn with Google</a> </div> </div> </body> </html>
سپس فایل success.ejs خود را باز کرده و کد زیر را در فایل خود کپی کنید:
<!doctype html> <html> <head> <title>Google SignIn</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"> <!-- load bootstrap css --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> <!-- load fontawesome --> <style> body { padding-top:70px; } </style> </head> <body> <div class="container"> <div class="jumbotron"> <h1 class="text-primary text-center"><span class="fa fa-user"></span> Profile Information</h1> <div class="row"> <div class="col-sm-6"> <div class="well"> <p> <strong>Id</strong>: <%= user.id %><br> <strong>Email</strong>: <%= user.emails[0].value %><br> <strong>Name</strong>: <%= user.displayName %> </p> </div> </div> </div> </div> </div> </body> </html>
مرحله 4: را راه اندازی سرور
در نهایت با دستور زیر برنامه خود را اجرا کرده و به آدرس http://127.0.0.1:3000 بروید
node app.js
منبع: وب سایت tutsmake