2015-01-07 15 views
0

Я следующий Express.js файлПолучить текущего пользователя в Passport.js

var express = require('express'); 
var favicon = require('serve-favicon'); 
var morgan = require('morgan'); 
var compression = require('compression'); 
var bodyParser = require('body-parser'); 
var methodOverride = require('method-override'); 
var cookieParser = require('cookie-parser'); 
var errorHandler = require('errorhandler'); 
var path = require('path'); 
var config = require('./environment'); 
var passport = require('passport'); 

module.exports = function(app) { 
    var env = app.get('env'); 

    app.set('views', config.root + '/server/views'); 
    app.engine('html', require('ejs').renderFile); 
    app.set('view engine', 'html'); 
    app.use(compression()); 
    app.use(bodyParser.urlencoded({ 
     extended: false 
    })); 
    app.use(bodyParser.json()); 
    app.use(methodOverride()); 
    app.use(cookieParser()); 
    app.use(passport.initialize()); 
    app.use(passport.session()); // passport session middleware 
    if ('production' === env) { 
     app.use(favicon(path.join(config.root, 'public', 'favicon.ico'))); 
     app.use(express.static(path.join(config.root, 'public'))); 
     app.set('appPath', config.root + '/public'); 
     app.use(morgan('dev')); 
    } 

    if ('development' === env || 'test' === env) { 
     app.use(require('connect-livereload')()); 
     app.use(express.static(path.join(config.root, '.tmp'))); 
     app.use(express.static(path.join(config.root, 'client'))); 
     app.set('appPath', 'client'); 
     app.use(morgan('dev')); 
     app.use(errorHandler()); // Error handler - has to be last 
    } 
}; 

После того как пользователь вошел в систему с помощью Facebook, в мой контроллер, когда я пытаюсь сделать req.user или req.session.passport.user это получить undefined.

Как я могу получить текущего пользователя?

+0

Это не является достаточными кодами. – NeiL

+1

Пожалуйста, добавьте 'passport.serializeUser',' passport.deserializeUser' и 'passport.use()' звонки. Кроме того, если приведенная выше ваша полная конфигурация Express app не поддерживает сеанс. Установите [экспресс-сеанс] (https://www.npmjs.com/package/express-session) и используйте ** перед ** вызовом 'passport.session()' – vesse

ответ

0

Вам необходимо определить стратегии аутентификации и вызвать паспорт.authenticate для аутентификации ваших пользователей. Смотрите пример в the passport guide

+0

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

+0

@harshit - вы опубликовали полный код? Вы реализовали функцию сериализации паспорта? – drorw

+0

Да, я пропустил добавление функции сериализации паспорта. – harshit

0

Когда аутентификация успешна req.user автоматически устанавливается для пользователя

var express    = require("express"), 
app     = express(), 
bodyParser   = require("body-parser"), 
mongoose    = require("mongoose"), 
passport    = require("passport"), 
flash     = require("connect-flash"), 
localStrategy   = require("passport-local"), 
User     = require("./models/user"), 
passportLocalMongoose = require("passport-local-mongoose") 


app.use(require("express-session")({ 
secret: "demoapp", 
resave: false, 
saveUninitialized: false 
})); 

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

passport.use(new localStrategy(User.authenticate())); 
passport.serializeUser(User.serializeUser()); 
passport.deserializeUser(User.deserializeUser()); 

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

app.set("view engine", "ejs") 
app.use(express.static(__dirname + "/public")); 
app.use(express.static(__dirname + "/dashboard")); 

Получить текущие данные пользователя. Вы можете установить CurrentUser на свой собственный текст

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

если вы используете EJS показать профиль пользователя в браузере

<p> <%= currentUser.username %> </p> 
<p> <%= currentUser.country %> </p> 
Смежные вопросы