2015-01-27 2 views
0

Я пытаюсь настроить простой вход в паспорт, используя узел, выражать и угловато. У меня проблемы с продолжением сеансов, я думаю, потому что это не настройка cookie браузера, но почему?Экспресс SessionID не является постоянным, нет cookie браузера

В моем браузере нет файла cookie, а sessionID, распознаваемый узлом, отличается от каждого запроса.

Это используется Экспресс 4, который кажется довольно существенно отличным от Exp3. Я думаю, что это может иметь какое-то отношение к настройке middlware или конфигурации хранилища сеансов. Я пытаюсь уйти с обработкой по умолчанию, которая, я думаю, является MemoryStore в Exp4, но она, похоже, не работает.

Также следует упомянуть, что статический HTML/CSS обслуживается apache, а не узлом. Узел просто настроен для вызовов API.

Вот соответствующие строки из package.json.

"dependencies": { 
    "bcrypt-nodejs": "0.0.3", 
    "body-parser": "^1.10.1", 
    "connect-flash": "^0.1.1", 
    "cookie-parser": "^1.3.3", 
    "express": "^4.11.0", 
    "express-session": "^1.10.1", 
    "mongoose": "^3.8.21", 
    "morgan": "^1.5.1", 
    "passport": "^0.2.1" 
    } 

И установки промежуточного

var express = require('express'); 
var morgan = require('morgan'); 
var mongoose = require('mongoose'); 
var passport = require('passport'); 
var flash = require('connect-flash'); 
var app = express(); 

var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var session = require('express-session'); 

...

app.use(morgan('dev')); // log every request to the console 
app.use(cookieParser()); // read cookies (needed for auth) 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

app.use(session({ 
    secret: 'DGUBJH7H6G6GTF5R53R54RSBH', 
    resave: true, 
    saveUninitialized: true 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
app.use(flash()); 

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

require('./config/routes.js')(app, passport); 

Маршруты

app.post('/login', passport.authenticate('local-login'), function(req, res) { 
    var user = req.user; 
    res.send(user); 
    }); 
app.get('/user', isLoggedIn, function (req, res) { 
    var user = req.user; 
    res.send(user); 
    }); 
function isLoggedIn(req, res, next) { 
    var user = req.user; 
    // if user is authenticated in the session, carry on 
    if (req.isAuthenticated()) 
    return next(); 

    res.status(403).send(); 
} 

Я мог бы также разместить код паспорта с сериализации и десериализации функций , но я не уверен, что они для этого важно. Мне просто нужно выяснить, почему этот код не устанавливает файлы cookie браузера! Любая помощь будет принята с благодарностью!

ответ

0

Таким образом, основная проблема здесь для меня было то, что я делал свой логин вызов асинхронно с сервисом $ HTTP ANGULAR в. Похоже, что большинство браузеров не будут устанавливать cookie на основе заголовка асинхронного запроса. Я изменил свою форму входа, чтобы указать прямо на мой обратный вызов входа в узел, и теперь он перезагружает страницу, чтобы установить файл cookie, а затем сразу перенаправляется на главную страницу моего приложения.

0

Здесь вы устанавливаете сеанс, но не устанавливаете cookie. Итак, попробуйте установить куки

// configuration 
app.use(express.cookieParser()); 
// or `express.cookieParser('secret')` for signed cookies 

// routing 
app.get('/foo', function (req, res) { 
    res.cookie('bar', 'baz'); 
`}); 

app.get('/bar', function (req, res) { 
    res.send(req.cookies.bar); 
}); 
+0

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

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