Хранить пользовательские сессии: node.js, express, mongoose-auth - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть новый вопрос о проверке подлинности и сеансах для узла node.js.

Я произвел проверку подлинности с помощью: express.js и mongoose-auth (mongodb):

app.use(express.cookieParser());
app.use(express.session({ secret: 'esoognom'}));
app.use(auth.mongooseAuth.middleware());

Я не очень хорошо понимаю весь этот персонал.После проверки подлинности пользователей они остаются такими, пока сервер не перезагрузится.Я хочу иметь более постоянное состояние аутентификации, как мне это сделать?

Спасибо за помощь.

Ответы [ 4 ]

4 голосов
/ 20 декабря 2011

Если вы хотите, чтобы сеансы сохранялись даже после сбоя / перезапуска сервера, вам следует использовать один из следующих модулей:

  • connect-redis (в дБ памяти, которая обычно используется) <сеансы хранятся в Redis db </li>
  • connect-mongodb <сеансы, хранящиеся в MongoDB </li>
  • другие магазины сессий, найденные здесь, такие как couchdb или memcached: https://github.com/senchalabs/connect/wiki

Вы также можете установить время жизни куки, используя параметр maxAge при добавлении промежуточного программного обеспечения сеанса. Например, если мы использовали connect-mongodb:

app.use(express.session({
    secret : "Stays my secret",
    maxAge : new Date(Date.now() + 3600000), //1 Hour
    store  : new MongoStore({ db: 'myDB' })
}));
2 голосов
/ 20 декабря 2011

Если вы используете mongostore, он будет сохраняться дольше, чем перезапуск сервера.

Это настраивается с помощью свойства maxAge.По умолчанию используется значение 14400000, которое, я считаю, указано в мс, поэтому 4 часа.

Подробнее см. В документации: http://senchalabs.github.com/connect/middleware-session.html

1 голос
/ 08 июля 2012

Я использую экспресс V2.5.11.Здесь опция maxAge, похоже, не работает.Поэтому я переписываю код настройки сеанса следующим образом.

var MongoStore = require('connect-mongo')(express);
app.use(express.session({
    secret : "basic server",
    cookie : {
        maxAge : 20000 //20 seconds
    }, 
    //maxAge:  new Date(Date.now() + 20000),
    store : new MongoStore({
        host : 'localhost',
        port : 27017,
        db : 'yourdb',
        collection : 'session',
        stringify : false,
        clear_interval : (10)//search db to clear the expired every 10 seconds  
    })
}));

Код работает довольно хорошо.

0 голосов
/ 14 октября 2013

Аутентификация с использованием паспорта

var express = require('express'),
routes = require('./routes'),
api = require('./routes/api'),
http = require('http'),
path = require('path'),
mysql = require('mysql'),
passport = require('passport'),
LocalStrategy = require('passport-local').Strategy;

//MySQL

var sqlInfo = {
    host: 'localhost', 
    user: 'root',
    password: '', 
    database: 'dbname'
}


global.client = mysql.createConnection(sqlInfo);

client.connect();




var app = module.exports = express();




/**
 * Configuration
 */

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(path.join(__dirname, 'public')));

app.use(express.cookieParser("secret"));
app.use(express.session({
    secret: 'keyboard cat'
}));
app.use(passport.initialize());
app.use(passport.session());

app.use(app.router);




passport.use(new LocalStrategy(

    function(username, password, done) {

        return check_auth_user(username,password,done);

    }

    ));


// development only
if (app.get('env') === 'development') {
    app.use(express.errorHandler());
}

// production only
if (app.get('env') === 'production') {
// TODO
}



/**
 * routes start---------------------------------------------------------------
 */
// home page contain login form 
app.get('/home', function(reg, res){
    //check user session value, is logged in 
    if(req.user)
        res.render('dash',{
            username: req.user['member_id']//req.user array contains serializeUser data
        });
    else
        res.render('index');

});

app.get('/logout', function(req, res){

    req.logout();
    res.redirect('/home');
});

//login form submit as post

app.post('/login',
    passport.authenticate('local', {
        successRedirect: '/dashboard',
        failureRedirect: '/home'
    })
    );
//to project dashboard
app.get('/dash',routes.dash);
//to project dashboard
app.get('/signup',routes.signup);
//to project dashboard

app.get('*', routes.index);

/**
 * routes end---------------------------------------------------------------------
 */


/**
 * Start Server
 */

http.createServer(app).listen(app.get('port'), function () {
    console.log('Express server listening on port ' + app.get('port'));
});

нажмите для более подробной информации с примером

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...