2013-12-22 2 views
0

У меня есть приложение express, которое я пытаюсь выполнить с помощью проверки подлинности с помощью passport-local. Вот мое express приложение:Аутентификация экспресс-приложения с паспортом - Expressjs Passportjs

app.use(express.bodyParser()); 
app.use(express.cookieParser()); 
app.use(express.session({ secret: 'this is a string' })); 
app.use(passport.initialize()); 
app.use(passport.session()); 

client = new pg.Client(connectionString); 
client.connect(); 

passport.use(new LocalStrategy(
    function(username, password, done) { 
    var query = client.query('SELECT * FROM users WHERE EMAIL = $1', [username], function(err, result){ 
     if(err) { 
     console.log("Error"); 
     return done(err); 
     } 
     if(!result.rows.length > 0) { 
     console.log("No users"); 
     return done(null, false, { message: 'User not found'}); 
     } 
     if(result.rows[0].password !== password) { 
     console.log("incorrect password"); 
     return done(null, false, { message: 'Password Incorrect'}); 
     } 
     console.log('authenticated'); 
     return done(null, result.rows[0]); 
    }); 
    } 
)); 

passport.serializeUser(function(user, done) { 
    'use strict'; 
    console.log('serialize'); 
    console.log(user); 
    done(null, user.email); 
}); 

passport.deserializeUser(function(id, done) { 
    'use strict'; 
    console.log('deserialize'); 
    User.findById(id, function(err, user) { 
    done(err, user); 
    }); 
}); 

app.post('/login', passport.authenticate('local'), function(req, res) { 
    'use strict'; 
    console.log(req.user.username); 
}); 

app.listen(port, function() { 
    'use strict'; 
    console.log('Listening on:', port); 
}); 

Я тогда попал в /login URL с этой json в моем теле: {username: '[email protected]', password: 'password}. Я прохожу через функцию LocalStrategy, а затем в функции сериализации она выполняет функцию done, а затем просто зависает. Я не получаю никаких ошибок или дополнительных протоколов, соединение остается открытым, а управление не возвращается вызывающему. Я никогда не получаю статус http, он просто зависает.

Я думаю, что это проблема с моим session, но я не понимаю, что делать дальше?

+0

Короткий вопрос. Получаете ли вы результат на console.log (req.user.username); при открытии yourDomain: порт/логин? – ztirom

+0

Я получаю undefined. – jhamm

+0

Я изменил его на 'console.log (req.user.user_name)', а затем получил имя пользователя. – jhamm

ответ

1

Хорошо, вы можете попробовать перенаправить туда? Похоже, ваша сессия/auth в порядке, если вы получите правильное имя пользователя в этот момент.

app.post('/login', passport.authenticate('local', { 
    successRedirect: '/somewhere_intern', 
    failureRedirect: '/login' 
})); 
+0

Я добавил '{successRedirect:"/users ", failureRedirect:"/projects "}' Ошибка, которую я получаю, это 'Can not GET/users'. – jhamm

+0

У меня не было маршрута '/ users', определенного в этом файле. – jhamm

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