How to configure Passportjs with SQL Server?

自作多情 提交于 2019-12-22 10:54:12

问题


I am writing an app based on SQL Server, ExpressJs, NodeJS, AngularJs, I am an express beginner, I need to handle sessions so I have been thinking on PassportJs, I can't find documentation to integrate SQL Server with PassportJs so I am pretty confused, I have been trying but I don't get it yet, I have built my app with express-generator so this is my app.js

Passport requires:

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

Routes:

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

express-session:

app.use(session({secret: 'xXxXxXXxX'}));

app.use(passport.initialize());
app.use(passport.session());

app.use('/', routes);
app.use('/login', login);

passport-init:

var initPassport = require('./r12_modulos/sesion/passport-init.js');
initPassport(passport);

This is what I have in passport-init.js:

var conex = require('../conexion_bd/conex_mssql.js');
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;

module.exports = function () {

passport.serializeUser(function (user, done) {
    console.log('serializing user:', user.username);
    done(null, user.username);
});

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

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

        var _cParameters = [];
        _cParameters.push({ name: 'usuario', type: 'VarChar', value: username });
        _cParameters.push({ name: 'password', type: 'NVarChar', value: password });

        conex.sp_recordset(conex.mssql_conect, 'dbo.sp_sis_loginR12', _cParameters, function (data) {
            if (data[0].response == 1) {
                return done(null, data[0].usuario);
            }
            else {
                return done(null, false);
            }
        });

    }
    ));
};

As you can see I have wrote a module to execute SQL Server stored procedures, when I am searching on internet passportjs is commonly integrated with Mongo, I don't know how to handle the passport.serializeUser and passport.deserializeUser functions with SQL Server.

This is What I have in the route login.js:

var express = require('express');
var passport = require('passport');
var router = express.Router();

router.post('/', passport.authenticate('login', {
    successRedirect: '/',
    failureRedirect: '/login'
}));

module.exports = router;

When I send a post request the server does not return an error but do not run my LocalStrategy.


回答1:


Googling I have found this post Understanding passport.js authentication flow, As the link says the autor explains which is the passportJs flow, I had some errors, unless you define the name of the username and password fields you must to send them in the post like this req.body.username and req.body.password, that was one of my errors, I handle the Serialize and Deserialize functions on this way:

serializeUser function

passport.serializeUser(function (user, done) {
    console.log('serializing user:', user);
    done(null, user);
});

deserializeUserfunction

passport.deserializeUser(function (username, done) {
    console.log('deserializing user:', username);
    done(null,username);
});


来源:https://stackoverflow.com/questions/30066094/how-to-configure-passportjs-with-sql-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!