2014-10-10 24 views
5

Express uygulamasında Passport kitaplığı kullanarak oturum açma doğrulamasını çağırmak için AJAX kullanmaya çalışıyorum. Böyle Im kullanarak yerel stratejisi:jQuery AJAX çağrısı Passportjs oturum açma Express (nodejs) Framework

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); 
}); 

Sorun im böyle bir şey yapmaya çalışıyor, bodyparser.json() işlevi taklit Pasaport değişkenler geçmek bilmiyorum geçerli:

$(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; 
    }); 

}); 

Düzelt-

Benim Strateji:

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 
    } 
)); 

Nesne {detay:: Nesne} ayrıntı: Objectmessage: "Eksik kimlik" proto:

birisi bana doğru yönde işaret edebilir, kimlik bilgileri inat im Geting geçen Hata?

cevap

7

Bu işe yaramalı, test edilmemeli, yazım hataları varsa bildirin.

Temel olarak,/login'de bir POST isteğini dinlemek için ekspres uygulamanıza ihtiyacınız vardır, bu rotada pasaportunuzun kimliğini ekleyebilirsiniz.

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); 
}); 

Ayrıca, stratejide, alanlar adının doğru yani olduğundan emin olun: Ben orijinal soruyu kaydetmiştiniz

passport.use('loginUsers',new LocalStrategy({ 
      usernameField : 'username', 
      passwordField : 'password', 
      passReqToCallback : true 
     }, 
+0

, im ki (Mesaja rotayı) yapıyor ama ben değişkenleri geçmesi olamaz pasaport doğru. Teşekkürler – mdv

+0

Yerel stratejiniz nasıl görünüyor? – xShirase

+0

orijinal sorudaki güncellemeye bakın. – mdv