پیاده‌ سازی احراز هویت گوگل در Node.js

?How to Implement Google Authentication in Node.js

How-to-Implement-Google-Authentication-in-Nodejs

در این آموزش قصد داریم نحوه پیاده سازی سیستم احراز هویت لاگین گوگل در 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

نویسنده شوید
دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

mostaf
19 خرداد 1401
سلام وفتی از کد بالا استفاده می کنم خطای 403 میگیرم. باید چیکار کنم؟

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.