JQuery AJAX вызов для входа в Passportjs в Express (nodejs) Framework
5 mdv [2014-10-10 03:13:00]
Я пытаюсь использовать AJAX для вызова проверки входа, используя библиотеку Passport в приложении Express. Я использую локальную стратегию следующим образом:
router.post('/login', function(req, res, next) {
passport.authenticate('loginUsers', function(err, user, info) {
if (err) {
return next(err);
}
// if user is not found due to wrong username or password
if (!user) {
//return res.render('login', {});
res.json({detail: info});
}//(!user)
//passport.js has a logIn user method
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.render('account', {});
}); //req.logIn
})(req, res, next);
});
Проблема в том, что я не знаю, как передать переменные в Passport, эмулируя функцию bodyparser.json(), и пытаюсь сделать что-то вроде этого:
$(document).ready(function() {
$('form').submit(function() {
$.ajax({
type:'POST',
url:'/login',
data: {username: $('#us').val(), password: $('#pass').val()},
success:function(result){
if(!result){
//$('form input[name="username"]').css("background-color", "red");
}
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(xhr.status);
console.log(thrownError);
}
});
return false;
});
});
ИЗМЕНИТЬ -
Моя стратегия:
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser(function(user, done) {
done(null, user);
});
passport.use('loginUsers', new LocalStrategy(
function(username, password, done) {
users.findOne({email: username}, function(err, user) {
if (err) { return done(err); }
if (!user) {
console.log('[+] DB: user/password failure'.red);
return done(null, false, {error: ''});
}else if(!bcrypt.compareSync(password, user.hashed_password)){
console.log(("[+] Password error").red);
return done(null, false, {error: ''});
}else if(user.verified === false){
console.log("[+] DB: user not verified");
return done(null, false, {error: ''});
}else{
console.log("[+] DB: user/password success".green);
return done(null, user);
} //else
}); //findOne
}
));
Ошибка при передаче учетных данных сохраняется, im geting:
Объект {detail: Object} detail: Objectmessage: "Отсутствующие учетные данные" Прото:
Может ли кто-нибудь указать мне в правильном направлении?
jquery node.js ajax express passport.js
1 ответ
7 Решение xShirase [2014-10-10 03:20:00]
Это должно работать, непроверено, дайте мне знать, если там опечатки.
В принципе, вам нужно ваше экспресс-приложение для прослушивания запроса POST на /login, на этом маршруте вы можете добавить свой паспортный сертификат.
app.post('/login', function(req, res, next) {
passport.authenticate('loginUsers', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.render('account'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.json({detail: info});
});
})(req, res, next);
});
Кроме того, в вашей стратегии убедитесь, что имя поля верное, т.е.:
passport.use('loginUsers',new LocalStrategy({
usernameField : 'username',
passwordField : 'password',
passReqToCallback : true
},