如何使用SQL Server配置Passportjs?

问题描述:

我正在基于 SQL Server ,ExpressJs,NodeJS,AngularJs编写应用程序一个快速的初学者,我需要处理会话,所以我一直在思考PassportJs,找不到用于将SQL Server与PassportJs集成的文档,所以我很困惑,我一直在尝试,但是我还没有得到,用express-generator构建了我的应用程序,所以这是我的app.js

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

护照要求:

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

路线:

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

express-session:

express-session:

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

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

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

passport-init:

passport-init:

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

这就是我在 passport-init.js 中所拥有的:

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);
            }
        });

    }
    ));
};

如您所见,我已经编写了一个模块来执行SQL Server存储过程,当我在Internet上进行搜索时,通常将js与Mongo集成在一起,我不知道如何处理 passport.serializeUser passport.deserializeUser 函数与SQL Server一起使用.

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.

这就是我在 login.js 路线中所拥有的:

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;

当我发送发布请求时,服务器不会返回错误,但是不会运行我的LocalStrategy.

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

Google搜索,我发现了这篇帖子了解"passport.js身份验证流程" ,正如该链接所述,指导者解释了哪个是"passportJs"流程,我遇到了一些错误,除非您定义用户名和密码字段的名称,否则您必须像在帖子中那样发送它们这个 req.body.username req.body.password ,这是我的错误之一,我以这种方式处理Serialize和Deserialize函数:

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函数

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

反序列化用户功能

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