jaredhanson / passport

Simple, unobtrusive authentication for Node.js.
https://www.passportjs.org?utm_source=github&utm_medium=referral&utm_campaign=passport&utm_content=about
MIT License
22.93k stars 1.24k forks source link

Neverending 'pending' request #356

Closed estvmachine closed 9 years ago

estvmachine commented 9 years ago

Im trying this, actually its very same that documentation, i ask not using session in one try, but i configure anyways with connect-mssql (https://github.com/patriksimek/connect-mssql). My local strategy is a connection to SQL Server using node-mssql plugin with tedious driver (https://github.com/patriksimek/node-mssql), im working all my project with this plugin so its works.

When i try with this two options i got this

image

ROUTES OPTION 1

//Option 1
module.exports = function(app) {
    app.post('/auth/signin',passport.authenticate('local',{ session: false }),
            function(req, res) {
                    console.log(req.user);
                res.json(req.user.username);
    });
}

ROUTES OPTION 2

//Option 2
module.exports = function(app) {
      app.post('/auth/signin', function(req, res,next){

        passport.authenticate('local', function(err, user, info) {

        //if (err || !user) {
        if(err !== null){
            res.status(400).send(info);
        } else {
            // Remove sensitive data before login
            user.password = undefined;
            user.salt = undefined;
            user.displayName= user.username;

            /*req.user=user;
            res.json(user);*/

            //Esto produce que se guarde una sesion, ademas de guardar req.user=user
            req.login(user, function(err) {
                if (err) {
                    res.status(400).send(err);
                } else {
                    res.json(user);
                }
            });
        }
    })(req, res, next);
  });
}

STRATEGY


//File: strategies/local.js

module.exports = function() {

passport.use(new LocalStrategy(
        {
            usernameField: 'username',
            passwordField: 'password',
      passReqToCallback: true
        },
        function(req, username, password, done) {

                sql.connect(configDB, function(err) {
                // ... error checks

               var request = new sql.Request();
                request.query('SELECT username AS username,password AS password FROM USERS WHERE username= '+ "'"+ username+"'");

                request.on('recordset', function(columns) {
                // Emitted once for each recordset in a query
                    columnas.push(columns);
                });

                request.on('row', function(row) {
                    // Emitted for each row in a recordset
                    filas.push(row);
                });

                request.on('error', function(err) {
                    // May be emitted multiple times
                    errores.push(err);
                });

                request.on('done', function(returnValue) {
                    // Always emitted as the last one
                    //console.tag('controllers/drivers/mssql','executeQuery','columnas').log(columnas);
                    console.tag('config/strategies/mssql.js','LocalStrategy','filas').log(filas);
                    console.tag('config/strategies/mssql.js','LocalStrategy','errores').log(errores);

                                if(errores.length!==0){
                                    var user= filas[0];
                                    return done(null, user);
                                }
                                else {
                                    return done(null,false, {message: 'Error de conexion'} )
                                }

                });

            });//fin sql.connect

        } // fin function(username, password, done)

    ));
};

MIDDLEWARE


var express = require('express'),
       session = require('express-session'),
       bodyParser = require('body-parser'),
       cookieParser = require('cookie-parser'), 
       passport = require('passport'),
       MSSQLStore=require('connect-mssql')({
        session: session
    }),
        flash = require('connect-flash');

//Configure mssql driver
var configDB = {
                user: 'random',
                password: 'randomerp',
                server: '192.168.20.200',
                database:'9654490MM',
                options: {
                    encrypt: true // Use this if you're on Windows Azure
                }
            },
        optionsDB= {
                table: 'sessions'
        };

  app.use(express.static(path.resolve('./public')));
  app.use(express.cookieParser());
  app.use(express.bodyParser());
   app.use(session({
        saveUninitialized: true,
        resave: true,
        secret: config.sessionSecret,
        store: new MSSQLStore(configDB,optionsDB)
    }));
  app.use(passport.initialize());
  app.use(passport.session());
  app.use(flash());

 //Now i tell the app, where the routes and strategies are
  require('../routes/users.routes.js')(app);
  require(path.resolve('./strategies/local.js))();
  ...
  app.listen(8080);
});
timorss commented 4 years ago

same