0
votes

I am creating login using a passport.js. But getting an error 'passport.initialize() middleware not in use. Tried all the existing stack overflow similar question but I am still getting the error, Can anyone suggest a fix?

Error: passport.initialize() middleware not in use at IncomingMessage.req.login.req.logIn (/srv/node_modules/passport/lib/http/request.js:46:34) at Strategy.strategy.success (/srv/node_modules/passport/lib/middleware/authenticate.js:248:13) at verified (/srv/node_modules/passport-oauth2/lib/strategy.js:186:20) at datastore.runQuery.then.results (/srv/config/passport-setup.js:48:16)

passport-setup.js

const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const keys = require('./keys');
const gstore = require('gstore-node')();
const Datastore = require('@google-cloud/datastore');
const projectId = 'stately';
const datastore = new Datastore({
    projectId: projectId,
});
gstore.connect(datastore);



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

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

passport.use(
    new GoogleStrategy({
        clientID: keys.google.clientID,
        clientSecret: keys.google.clientSecret,
        callbackURL: '/auth/google/callback',
        userProfileURL:keys.google.userProfileURL
   
},(accessToken, refreshToken, profile, done) => {
console.log(profile);
var email =profile.emails[0].value;
var user =profile.id;
const newUser = {
username :profile.displayName,
googleId : profile.id,
email:email
}
const query = datastore.createQuery('Profile').filter('email', '=', email);
datastore.runQuery(query).then(results => {
    const tasks = results[0];
    const newData = JSON.stringify(tasks);
    const parsed = JSON.parse(newData);
    const data = parsed;
    const gUser = data[0].email;
    if (gUser == email) {
        //gUser = profile.id;
        console.log("My Email",user,profile.id)
        return done (null, user);
        }
        else {
        return done (null, false);
        }
/*
    if (gUser == email) {
        return done (null, user);
     } else {
    datastore.save({
    key: datastore.key(['Profile', username]),
    data: newUser,
    }).then(() => {
    //  res.send("Iteam Saved to Database");
    return done (null, false);
    res.redirect('/login');
*/
    }).catch((err) => {
   console.log(err)
    })
    })
    )

pp.js

var express = require('express');
var server = express();
const https = require('https');
const ejs = require('ejs');
const gstore = require('gstore-node')();
const Datastore = require('@google-cloud/datastore');
const mimeTypes = require('mimetypes');
const fs = require('fs');
const projectId = 'statelyXXXXX';
var path = require("path");
const bodyParser = require("body-parser");
const passport = require('passport');
const cookieSession = require('cookie-session');
server.set('views', path.join(__dirname, 'views'));
server.set('view engine', 'ejs');
server.engine('html', require('ejs').renderFile);
//Set path for static assets
server.use(express.static(path.join(__dirname, 'public')));

server.use(bodyParser.json({
    limit: '50mb'
}));
server.use(bodyParser.urlencoded({
    limit: '50mb',
    extended: true
}));
const SendOtp = require('sendotp');
const sendOtp = new SendOtp('233', 'Your verification code is {{otp}}');
var moment = require('moment');
const swal = require('sweetalert2');
var nodemailer = require('nodemailer');
var SMTP = require('nodemailer-smtp-transport');
const vision = require('@google-cloud/vision');

//Database
const datastore = new Datastore({
    projectId: projectId,
});
gstore.connect(datastore);
//View engine setup

const keys = require('./config/keys');
const passportSetup = require('./config/passport-setup');
const authRoutes = require('./routes/auth-routes');
var templates = require('./routes/templates');
//set Routes
server.use('/', templates);
server.use('/auth', authRoutes);



server.use(cookieSession({
maxAge:24*60*60*1000,
keys:[keys.session.cookieKey]
}))

//initialize passport 

server.use(passport.initialize());
server.use(passport.session());
1
Try initializing passport before you set up routes - zerosand1s

1 Answers

0
votes

node.js loads the index.js from top to bottom in order. When it comes to reading this

const passportSetup = require('./config/passport-setup');

Node.js is going to parse this module and will see passport.js loaded and some of passport.js functions in use, but they are not activated. so it will send you an error created by passports. js

first you have to use the cookie session. because cookie session is going to parse the cookie, and retrieve the necessary data which is user.id and pass it to passport.js

server.use(cookieSession({
maxAge:24*60*60*1000,
keys:[keys.session.cookieKey]
}))

then we need to use the

app.use(passport.initialize())

middleware function to initialize passport.js so we can use passport in our route handlers. Middlewares are small functions that can be used to modify incoming requests to our app before they are sent off to route handlers.

then we use

app.use(passport.session())

middleware to connect passport.js to cookie session.