2015-09-30 4 views
2

У меня есть API-интерфейс Node, который работает на сервере OAuth. В конце танца SAML OAuth я установил Toker Token в cookie браузера.Node-Client-session vs express-session

// need cookieParser middleware before we can do anything with cookies 
app.use(express.cookieParser()); 

// set a cookie 
app.use(function (req, res, next) { 
    // check if client sent cookie 
    var cookie = req.cookies.cookieName; 
    if (cookie === undefined) 
    { 
    // no: set a new cookie 
    var randomNumber=Math.random().toString(); 
    randomNumber=randomNumber.substring(2,randomNumber.length); 
    res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true }); 
    console.log('cookie created successfully'); 
    } 
    else 
    { 
    // yes, cookie was already present 
    console.log('cookie exists', cookie); 
    } 
    next(); 
}); 


app.use(express.static(__dirname + '/public')); 

Теперь я был введен в причудливом НПМ, который делает почти то же самое https://github.com/mozilla/node-client-sessions

В то время как я был почти склонен об использовании этого НПМ, я наткнулся на экспресс-сессии. https://github.com/expressjs/session - это для сеансов на стороне сервера. Но это также устанавливает печенье

var express = require('express'); 
    var session = require("express-session"); 
    var app = express(); 


    app.use(session({ 
     resave: true, 
     saveUninitialized: true, 
     secret: 'ABC123', 
     cookie: { 
      maxAge: 60000 
     } 
    })); 


    app.get("/test", function(req, res) { 
     req.session.user_agent = req.headers['user-agent']; 
     res.send("session set"); 
    }); 

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

ответ

6

express-session это мой переход к.

Если вы посмотрите на то, что нужно, чтобы выполнить одно и то же с двумя разными методами, я думаю, что ответ ясен.

Если все, что вы хотите сделать, это установить клиентский файл cookie, который позволит серверу правильно аутентифицировать будущие запросы, экспресс-сессия является удивительной.

Вот примерный набор из another question I answered, который использует MongoDB в качестве движка для хранения сессий:

'use strict'; 

var express = require('express'), 
    session = require('express-session'), 
    cookieParser = require('cookie-parser'), 
    mongoStore = require('connect-mongo')(session), 
    mongoose = require('mongoose'); 

mongoose.connect('mongodb://localhost/someDB'); 

var app = express(); 

var secret = 'shhh'; 

app.use(session({ 
    resave: true, 
    saveUninitialized: true, 
    secret: secret, 
    store: new mongoStore({ 
    mongooseConnection: mongoose.connection, 
    collection: 'sessions' // default 
    }) 
})); 

// ROUTES, ETC. 

var port = 3000; 

app.listen(port, function() { 
    console.log('listening on port ' + port + '.') 
}); 
+0

И сессия будет соответствовать автоматически в каждом и каждом последующем вызове API? ПОЛУЧИТЬ ПОСТ? – lonelymo

+1

Да, точно. При входящих запросах экспресс-сессия ищет файл cookie 'connect.sid', а затем присоединяет сеанс к' req.session'. Обратите внимание, как 'session' определяется внутри' app.use (...) '. Сессия выступает в качестве промежуточного программного обеспечения. –

Смежные вопросы