Home > Net >  How to create jwt token after google login in nodejs
How to create jwt token after google login in nodejs

Time:01-09

Here I am trying to login with google and save jwt token to the database as well as on the browser after login. I am able to save tokens to the database but am not able to save tokens on the browser. How can I do it?

Here I am trying to login with google and save jwt token to the database as well as on the browser after login. I am able to save tokens to the database but am not able to save tokens on the browser. How can I do it?

// Google login
passport.use(new GoogleStrategy({
clientID: "1089485782592-hlltndeg9aikjoarh52m2s7jcpi15of4.apps.googleusercontent.com",
clientSecret: "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",  
callbackURL: "http://localhost:3300/auth/google/callback",
passReqToCallback: true
}, 
async function(request, accessToken, refreshToken, profile, done, req, res) {
try {
// console.log(request);
// console.log(accessToken);
// console.log(refreshToken);
// console.log(profile);
// const id = profile.id;

  // console.log(profile.emails[0].value);
   registerEmail = profile.emails[0].value;
  // req.session.profileEmail = registerEmail;
  const registerName  = profile.name.givenName;
  const registerUsername = profile.id;
  const registerContactno = "1234567890";
  const registerPassword = "34rfcxx32";
  const source = "Google";

  const currentUser = await loginUser.findOne({ registerEmail })
  if (currentUser==null) {
    const newUser = new loginUser({
      registerEmail,
      registerName,
      registerUsername,
      registerContactno,
      registerPassword,
      source 
  })

    const saved = await newUser.save();
    const currentUser = await loginUser.findOne({ registerEmail })
    const token = await currentUser.generateAuthToken();
    console.log(`token ${token}`); 
    res.cookie('jwtToken', token, { expires: new Date(Date.now()   60 * 60 * 1000) })
    req.session.userName = currentUser.registerName;    
    return done(null, profile);
  }
  else {
    console.log('not saved');
    const currentUser = await loginUser.findOne({ registerEmail })
    const token = await currentUser.generateAuthToken();
    console.log(`token1 ${token}`); 
    res.cookie('jwtToken', token, { expires: new Date(Date.now()   60 * 60 * 1000) })
    req.session.userName = currentUser.registerName;   
    console.log(profile); 
    return done(null, profile);

  }
}
catch(e) {
  console.log(`error while google login ${e}`);
}
}))



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

app.get('/auth/google/callback',
// passport.authenticate('google', { failureRedirect: '/about' }),
// function(req, res) {
//   console.log('dashboard');
//   // Successful authentication, redirect home.
//   res.redirect('/dashboard');
passport.authenticate( 'google', {
successRedirect: '/protected',
failureRedirect: '/auth/google/failure'
}));


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

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

 app.get('/protected', auth, async(req, res) => {
 try {
 // console.log(req.user);
 console.log('dashboard');
// console.log(req.user.displayName);
// console.log("isLoggedIn req.user: "   req.user);
// console.log(req)
   res.render('dashboard');
}
catch(e) {
console.log(`protected ${e}`);
}
});

app.get('/auth/google/failure', isLoggedIn, (req, res) => {
console.log('fail');
res.render('/');
});

 function isLoggedIn(req, res, next) {

// req.user ? next() : res.sendStatus(401);
console.log(req.user);
if (req.cookies!=undefined) {
  console.log("Authenticated"); 
  return next();
}
res.redirect('/');
}

CodePudding user response:

You don't need to save JWT tokens in DBs, never do that as they aren't meant for it. Instead, send JWT with the API calls. And on every subsequent call from the Frontend attach the token to the calls.

I am able to save tokens to the database but am not able to save tokens on the browser.

You don't need to save it to DB. On the browser, you can save it to the local storage.

const token = 'get token from API call';

localStorage.setItem("auth_token", token);
localStorage.getItem("auth_token");
  •  Tags:  
  • Related