Skip to main content

How to Login with Google API & store user data in MongoDB using Nodejs , expressJS , MongoDB

// Create a File passport.js 


Before creating passport.js  we must have client id , and client secret- . Get your clientID & Client Secret from Google Developer Account using link https://console.cloud.google.com/apis/credentials/consent?project=vernal-zone-374906  

// Make Oauth constent - UserType - External 



== set/add scope email & profile 




Then in Credential setting create new credentials to get Client Id and Client Secret 



//passport.js

import passport from 'passport';

import GoogleStrategy from 'passport-google-oauth2'

import {Strategy} from 'passport-google-oauth2'

passport.serializeUser((user , done) => {

done(null , user);

})

passport.deserializeUser(function(user, done) {

done(null, user);

});


passport.use(new GoogleStrategy({

clientID:"43989350384-ckjvij697vt7g3kdpg9dqe16k60k248.apps.googleusercontent.com",

clientSecret:"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e", // Your Credentials here.

callbackURL:"http://localhost:3000/auth/callback",

passReqToCallback:true

},

function(request, accessToken, refreshToken, profile, done) {

return done(null, profile);

}

));


//===============================================

//IndexRouter.js 


import './passport.js';

import passport from 'passport';



router.use(passport.initialize());

router.use(passport.session());


// Auth

router.get('/auth' , passport.authenticate('google', { scope:

[ 'email', 'profile' ]

}));


// Auth Callback

  router.get( '/auth/callback',

    passport.authenticate( 'google', {

      successRedirect: '/auth/callback/success',

      failureRedirect: '/auth/callback/failure'

}));


// Success

router.get('/auth/callback/success' , (req , res) => {

      if(!req.user)

    res.redirect('/auth/callback/failure');

      console.log(req.user)

    

      req.session.sunm=req.user.email;

      IndexController. registerGoogleUser(req.user).then((result)=>{

        res.render("userhome",{"sunm":req.session.sunm,"srole":"user","ubal":req.session.ubal}); // create your  own userhome page 

      }).catch((err)=>{

          res.render("login",{"output":"Unable to Login With Google"})

          console.log(err)

      })


});


// failure

router.get('/auth/callback/failure' ,(req,res) => {

res.render("login",{"output":"Google Authentication Failed !!"})

})

//==================================================


IndexController.js 


 registerGoogleUser(userDetails){

    return new Promise((resolve,reject)=>{

       IndexModel.getUsers({"email":userDetails.email}).then((result)=>{

            if(result)
               IndexModel.updateGoogleUserModel(userDetails).then((result)=>{
            resolve(result)
        }).catch((err)=>{
          reject(err)
        })

            else 
            var token = crypto.randomBytes(32).toString("hex");
            userDetails={...userDetails,"_id":_id,"status":0,"role":"user","info":Date(),"token":token,"account":"0"}
             IndexModel.registerGoogleUserModel(userDetails).then((result)=>{
            resolve(result)
        }).catch((err)=>{
          reject(err)
        })
       }).catch((err)=>{

       })
    })
 }

//===============================================================

// IndexModel.js 


import GoogleSchemaModel from '../schema/schema.js';

  registerGoogleUserModel(userDetails)
 {
  return new Promise((resolve,reject)=>{

      var obj = new GoogleSchemaModel(userDetails);
    
    obj.save((err,result)=>{

            err ? reject(err) : resolve(result) ;            
    });
  });  
 }

 

   updateGoogleUserModel(userDetails)
 {
  return new Promise((resolve,reject)=>{

    
    
       GoogleSchemaModel.update({"email":userDetails.email},{"info":Date.now()},(err,result)=>{

              err ? reject(err) : resolve(result);        
        });
  });  
 }

getUsers(condition_obj)
 {
  return new Promise((resolve,reject)=>{
  
    RegisterSchemaModel.findOne(condition_obj,(err,result)=>{
      err ? reject(err) : resolve(result);        
    })    
  }) 
 }

//=======================================================

/shema.js


import mongoose from 'mongoose';
import uniqueValidator from 'mongoose-unique-validator';


const GoogleSchema = mongoose.Schema({},{ strict: false })



GoogleSchema.plugin(uniqueValidator); 

const GoogleSchemaModel = mongoose.model('Google_tmp',GoogleSchema,'register'); 

export default GoogleSchemaModel

//=======================connection.js start==========================
import mongoose from 'mongoose';

const url="mongodb://localhost:27017/vasu1"
mongoose.set('strictQuery',false) 
mongoose.connect(url);
console.log("connected to database.");  
===============================================================

//login.js  

</form>
<a href='/auth'> <img src="../img/google.png" height="60px" width="190px"> </a>
</body>

===================================================================



Comments