2016-12-14 2 views
0

Я новичок в nodejs, поэтому я пытался создать систему аутентификации. Я реализовал его после выполнения учебника. Чтобы получить пользовательский объект при аутентификации, вам необходимо сохранить его в сеансе. Я сделал это путем настройки express-session следующим образом:Паспорт - пользователь не хранится в сеансе

require('./config/passport')(passport); // pass passport for configuration 

app.use(session({ 
    secret: 'thisisagreatgreatsecretforthesession', 
    resave: true, 
    saveUninitialized: true 
})); 

app.use(morgan('dev')); 
app.use(cookieParser()); 
app.use(bodyParser.urlencoded({ extended : false })); 
app.use(bodyParser.json()); 

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

app.use(function(req, res, next) { 
    res.locals.user = req.user; 
    next(); 
}); 


var routes = require('./app/routes')(app, passport); 

, а затем в паспорте я настроил сериализации и десериализации функции следующим образом:

passport.serializeUser(function(user, done) { 
     done(null, user.id); 
    }); 

passport.deserializeUser(function(id, done) { 
     User.findById(id, function(err, user) { 
      done(err, user); 
     }); 
    }); 

Я попытался утешить пользователя в функции deserializeUser и это было верный. Однако, когда я вызвал user в шаблоне, я получил сообщение об ошибке, указывающее, что пользователь не определен.

Я пропустил что-то еще в конфигурации?

ответ

0

Свойства сеанса по умолчанию не отображаются в шаблонах.

Если вы хотите получить доступ к req.user от ваших шаблонов, вы можете использовать простой экспресс Связующее ПО, которое будет разоблачить его:

app.use(function(req, res, next) { 
    res.locals.user = req.user; 
    next(); 
}); 

(убедитесь, что это промежуточное программное обеспечение добавляется после в session и паспортных промежуточное программное, но до любых маршрутов, которые делают шаблоны, которые имеют доступ user; с Express, порядок, в котором вы объявляете вопросы промежуточного слоя)

Это использует res.locals как способ предоставления данных всем шаблонам. Фактически, если вы посмотрите на документацию Express, он почти отобразит тот же самый код, что и пример того, как показывать пользовательские данные.

+0

Теперь я не получаю никаких ошибок, но в шаблоне ничего не отображается, когда я использую 'user'. Достаточно ли порядок настройки? – omarsafwany

+0

Если вы не получаете никаких ошибок, шаблон может получить доступ к 'user'. Вы можете добавить 'console.log (req.user)' внутри промежуточного программного обеспечения, чтобы убедиться, что оно действительно имеет значение (это скорее всего объект, из которого вы должны использовать свойства в своем шаблоне, например 'user.username' или что-то вроде того). – robertklep

+0

'console.log (req.user)' отлично работает, но в шаблоне, когда я использую '<% user.name%>', я ничего не получаю – omarsafwany