0

I'm currently writing an Express App using Passport. I need to export the whole login.js file because of the passport serialization process. I want to minimize the queries though and i need the sessionId of the returned object in the serialization process. I try to access userAfterQuery Object in the init.js file but it always seems to be undefined. This happens if i go for a login.userAfterQuery call but also if i use a getter function and call it like var obj = login.getter(). I really don't know how to fix this, help would be appreciated. This shouldn't be about asynchronous handling as the Query is nested within a callback and the object is defined in the login. The problem is rather in exporting the object properly.

This is the init.js:

const LocalStrategy = require("passport-local").Strategy;
var login = require("./login");
//var loginNew = new login();
userObjectAfterQuery = login.userAfterQuery;
//var user = req.user;


module.exports = function(passport) {

  //passport serialization to support persistent login sessions
  passport.serializeUser(function(user,done){
    //console.error(login.toString());
    //console.error(loginNew);
    console.error(userObjectAfterQuery)
      console.error(userObjectAfterQuery.username);

    console.log('serializing user: "'+ userObjectAfterQuery.username.S + '"');
    done(null, userObjectAfterQuery.sessionId.N);
  });

  passport.deserializeUser(function(id,done){
      consle.log('deserializing user: "'+ userObjectAfterQuery.username.S + '"');
      done(err,userObjectAfterQuery);
  });

  //setting up passport for login and signup
  login(passport);
}

This is the login.js file:

module.exports = function(passport) {

  var userAfterQuery = {};

  passport.use("login", new LocalStrategy({
      passReqToCallback: true
    },
    function(req,username,password,done) {
      var queryParams = {
    TableName: "users",
    KeyConditionExpression: "username = :user",
    ExpressionAttributeValues: {
      //username entered in jade form
      ":user":{"S":username}
           }
      };

      //querying dynamodb for username
      dynamodb.query(queryParams,
    function(err,data) {
      if(err) {
        console.error(err);
        return done(err);
      }

      //if no users with said username in db
      if(data.Count < 1) {
        console.error('user: "' + username + '" not found in db');
        return done(null, false, req.flash("message" , "user not found"));
      }
      //too many entries (admin's fault)
      if(data.Count > 1) {
        console.error('error, more than one user with username: "' + username + '" in the db');
        console.error("Entries :" + data.Count);
        return done(null,false,req.flash("message", "more than version of the username in the db"));
      } else {
          //only one user exists in db, query for username was successful
          var parsedQueryPw = data.Items[0].password.S;
          userAfterQuery = data.Items[0];

        //checking if entered password is wrong
        if(!isValidPassword(parsedQueryPw, password)) {
        console.error("invalid password");
        return done(null,false,req.flash("message","invalid user-password combination")); 
           }

      //successful login - user and password match
      console.log("login successful");

      //return user object for serialization
      return done(null,data);
//    });
     }
    });  
  }
));
}
Torben
  • 558
  • 2
  • 7
  • 16

0 Answers0