Nasibulloh Yandashev
Nasibulloh Yandashev

Reputation: 591

Can I build my project with oauth2 in Node JS

I want to use oauth2 authorization and resource servers with nodejs in my project. But I could not that. I tried many times to build oauth2 server with oauth2orize, express-oauth-server, oauth2-server libs but does not work. Please help me to build my proejct with oauth2

Upvotes: -2

Views: 1167

Answers (2)

Rishabh Jain
Rishabh Jain

Reputation: 137

You can use passportjs to provide you the oauth 2.0 support. You will need googleClientID and googleClientSecret. Which you can get by registering your application to google developers site

var GoogleStrategy = require('passport-google-oauth20').Strategy;

 const mongoose = require('mongoose');
 const keys = require('./keys');
 const User = mongoose.model('users');

module.exports = function(passport){
  passport.use(
new GoogleStrategy({
  clientID:keys.googleClientID,
  clientSecret:keys.googleClientSecret,
  callbackURL:'/auth/google/callback',
  proxy:true
},(accessToken,refreshToken,profile,done)=>{
//     console.log(accessToken);
//     console.log(profile);
  const image = profile.photos[0].value.substring(0,profile.photos[0].value.indexOf('?'));

  const newUser = {
    googleID:profile.id,
    firstName:profile.name.givenName,
    lastName :profile.name.familyName,
    email:profile.emails[0].value,
    image:image
  }

  //Check for existing user
  User.findOne({
    googleID:profile.id
  }).then(user=>{
    if(user){
      //Return user
      done(null,user);
    }
    else{
      //Create a new user
      new User(newUser)
      .save()
      .then(user=> done(null,user)); 
    }
  })
 })
)

passport.serializeUser(function(user, done) {
done(null, user.id);
});

passport.deserializeUser(function(id, done) {
 User.findById(id, function(err, user) {
   done(err, user);
     });
   });
 }

Dependencies = "passport": "^0.4.0", "passport-google-oauth": "^1.0.0"

This will redirect req. to above code..
const express = require('express');
const router = express.Router();
const passport = require('passport');

 router.get('/google',passport.authenticate('google',{scope:
      ['profile','email']}));

 router.get('/google/callback', 
   passport.authenticate('google', { failureRedirect: '/' }),
   function(req, res) {
   // Successful authentication, redirect home.
   res.redirect('/dashboard');
  });

   router.get('/verify',(req,res)=>{
   if(req.user){
   console.log(req.user);
  }else{
   console.log('Not Auth');
  }
});

router.get('/logout',(req,res)=>{
   req.logout();
   res.redirect('/');
 })
 module.exports = router;

Upvotes: 0

Gary Archer
Gary Archer

Reputation: 29218

see my blog at http://authguidance.com

NodeJS + tutorial based - with code samples and write ups

And you can send me questions

Very detailed though - might make your brain hurt!!

Upvotes: 1

Related Questions