I am trying to (1) authenticate existing user and (2) if a new username is not taken, create new user using passport.js, what should I change

I tried to implement it somehow but the problem is but It couldn't allow access to existing users, that is on the login system?

*The signup system works perfect.

Thanks in advance.

This is what my signup.jade look like:

head

title

    | Side Project | Signup

body

 form(action='/signup', method='post')

  div

    label Username :

    input(type='text', name='username')

    br

  div

    label Password :

    input(type='password', name='password')

  div

    input(type='submit', value='Submit')

| #{note}

This is what my login.jade look like:

    form(action='/login', method='post')

      div

        label Username:

        input(type='text', name='username')

        br

      div

        label Password :

        input(type='password', name='password')

      div

        input(type='submit', value='Submit')

    | #{note}

This is what my app.js file look like :

   var express = require('express');

   var path = require('path');

   var favicon = require('static-favicon');

   var logger = require('morgan');

   var cookieParser = require('cookie-parser');

   var bodyParser = require('body-parser');

   var routes = require('./routes/index');

   var users = require('./routes/users');

   var app = express();

   //monogDB

   var UserDetails = require('./models/data');


   //Passport.js setup

   var passport = require('passport');

   var LocalStrategy = require('passport-local').Strategy;

   app.use(passport.initialize());

   app.use(passport.session());

   //  view engine setup

   app.set('views', path.join(__dirname, 'views'));

   app.set('view engine', 'jade');


   app.use(favicon());

   app.use(logger('dev'));

   app.use(bodyParser.json());

   app.use(bodyParser.urlencoded());

   app.use(cookieParser());

   app.use(express.static(path.join(__dirname, 'public')));


   app.use('/', routes);

   app.use('/users', users);

   /// catch 404 and forward to error handler

   app.use(function(req, res, next) {

    var err = new Error('Not Found');

    err.status = 404;

    next(err);

   });



   /// error handlers

   // development error handler

   // will print stacktrace

   if (app.get('env') === 'development') {

       app.use(function(err, req, res, next) {

           res.status(err.status || 500);

           res.render('error', {

                message: err.message,

                error: err

           });

       });

   }

   // production error handler

   // no stacktraces leaked to user

   app.use(function(err, req, res, next) {

       res.status(err.status || 500);

       res.render('error', {

           message: err.message,

           error: {}

       });

   });

   //Passport.js

   //Login

   passport.serializeUser(function(user, done) {

     done(null, user);

   });

   passport.use(new LocalStrategy(function(username, password, done) {

     process.nextTick(function() {

       UserDetails.findOne({

         'username': username, 

       }, function(err, user) {

         if (err) {

           return done(err);

          }


         if (!user) {

           return done(null, false);

         }

         if (user.password != password) {

           return done(null, false);

         }

          return done(null, user);

       });

     });

   }));

   passport.deserializeUser(function(user, done) {

     done(null, user);

   });

   //Sign up

   passport.serializeUser(function(user, done) {

     done(null, user);

   });

   passport.deserializeUser(function(user, done) {

     done(null, user);

   });

   passport.use(new LocalStrategy(function(newusername, newpassword, done) {

     process.nextTick(function() {

        UserDetails.findOne({

         'username': newusername, 

       }, function(err, user) {

         if (err) {

           return done(err);

         }       

         if (!user) {

             var newUser = new UserDetails({"username":newusername, "password":newpassword});

             newUser.save(function (err, newUser) {

               if (err) 

               {

                   return console.error(err);

               }

               console.log("Document Saved!");

               });

            return done(null, true);

         }

       if(user){

           return done(null,false);

       }


         return done(null, user);

       });

     });

    }));

Regarding your code issue, I think it's because you have two different but unnamed Local Strategies. Thus, the second overwrites the first one.

You can give names to strategies, by doing : passport.use('local-signup',new LocalStrategy(..)) and passport.use('local-signin',new LocalStrategy(..)) .

Then, in your router, you can call the specific strategy by passing its name as the first parameter of passport.authenticate().

For example,

app.get('/signin', passport.authenticate('local-signin',...);
app.get('/signup', passport.authenticate('local-signup',...);