2016-04-22 16 views
6

Hızlı şablon kullanarak angular.js + node.js ve mongodb tabanlı basit bir blog web sitesinde çalışıyorum. POST yöntemiyle açısal denetleyiciden users.js adında bir api'ye girdim ve burada passport.authenticate yöntemiyle oturum açma doğrulandı. users.js numaralı telefondan pasaport yerel giriş stratejilerine ihtiyacım var.
Ancak çalışmıyor. Açısal giriş hizmeti kodu ve düğüm kullanıcıları api kodu. Herkes bana passport.js açısal ve düğümünde nasıl kullanılabileceğini söyleyebilir mi? kullanıcı bir hizmet aracılığıylaPasaport açısal düğüm uygulamasıyla nasıl kullanılır?

açısal yönlendirme

app.service('Auth',function($location,$http,$localStorage){     
    var userLogin ; 
    return{ 
    setLogIN:function(email,password){ 
     $http({ 
     method: 'POST', 
     url: '/users/login', //users.js having node routing. 
     data: {email:email, password:password}, 
     }) 

düğüm yönlendirme

router.post('/login',passport.authenticate('local', { 
    // use passport-local for authentication 
    successRedirect : '/profile', 
    failureRedirect : '/login', 
    failureFlash : true 
})); 

pasaport yerel strateji

app.use(passport.initialize()); 

app.use(passport.session()); 
passport.use(new LocalStrategy(
    function (username, password, done) { 

     User.findOne({username: username}, function (err, user) { 

      if (err) { 
       return done(err); 
      } 
      if (!user) { 
       return done(null, false, {alert: 'Incorrect username.'}); 
      } 
      if (user.password != password) { 
       return done(null, false, {alert: 'Incorrect password.'}); 
      } 
      return done(null, user); 
     }); 
    } 

)); 


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

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

function isAuthenticated(req,res,next){ 
    if(req.isAuthenticated())return next(); 
    res.redirect('/'); 
} 

Bu yüzden pasaport kullanarak kimlik doğrulaması yapmak istiyorum, ancak uygun kimlik doğrulamayı korumak için istemci tarafı geçici/yönlendirmesini kullanın.

Lütfen birisi bana doğru yönde işaret edebilir mi? Ya da ne yaptığımı tamamen yanlış mı söylüyorsun?

düzenleme: benim koduyla elde AM hata o LocalStrategy sözlük parametreler username ve password adlandırılacak beklediğini Varsayılan olarak

TypeError: POST http://localhost:3000/users/login 500 Internal Server Error

Not a valid User

+0

Mesaj ayrıca kimlik stratejisinin kod olsun. – ayushgp

cevap

2

sayfayı profile yönlendirmekten yer etmedi. yerine username ait email kullanmak istiyorsanız

, o zaman stratejisinde bunları tanımlamak gerekir: davanızı için

passport.use(new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password' 
    }, 
    function(username, password, done) { 
    // ... 
    } 
)); 

, bu olmalıdır:

passport.use(new LocalStrategy({ 
    usernameField: 'email', 
    passwordField: 'password' 
    }, 
function (username, password, done) { 

    User.findOne({username: username}, function (err, user) { 

     if (err) { 
      return done(err); 
     } 
     if (!user) { 
      return done(null, false, {alert: 'Incorrect username.'}); 
     } 
     if (user.password != password) { 
      return done(null, false, {alert: 'Incorrect password.'}); 
     } 
     return done(null, user); 
    }); 
} 
)); 
2

i için çözüm buldu benim sorusu .. nasıl ....... açısal-nodejs yönlendirme pasaportu kullanmak

//angular js routing 
$scope.userlogin=function(){ 
    $http({ 
     method:"post", 
     url:'/users/login', 
     data:{username:$scope.username,password:$scope.password}, 
    }).success(function(response){ 
     $scope.userData = response; 
     $localStorage.userData = $scope.userData; 
     console.log("success!!"); 
     $location.path("/profile") 
    }).error(function(response){ 
     console.log("error!!"); 
     $location.path("/login") 
    }); 
} 

POST yöntemini kullanıyorum ve düğüme (users.js) denetleyiciye bastığımda yanıtı alıyorum. Kullanıcı kimlik doğrulaması başarılı olursa profil görünümüne yeniden yerleştirilir, aksi halde giriş görünümünde kalır.

//add these two lines to app.js 
// var app = express(); 
app.use(passport.initialize()); 

app.use(passport.session()); 

//node routing 
// add passport-stretegies to users.js 
passport.use(new LocalStrategy(function(username, password, done) { 
    user.findOne({username: username }, function(err, user) { 
     if (err) { return done(err); } 
     if (!user) { 
      return done(null, false, { message: 'Incorrect username.' }); 
     } 
     if (user.password != password) { 
      return done(null, false, { message: 'Incorrect password.' }); 
     } 
     return done(null, user); 
     // console.log(user) 
    }); 
})); 

//passport serialize user for their session 
passport.serializeUser(function(user, done) { 
    done(null, user.id); 
}); 
//passport deserialize user 
passport.deserializeUser(function(id, done) { 
    user.findById(id, function(err, user) { 
     done(err, user); 
    }); 
}); 

//router on same page 
router.post('/login',passport.authenticate('local'),function(req,res){ 

res.send(req.user); 
    //console.log(req.user); 
}); 

Kullanıcı daha sonra doğrulanmış kullanıcı yanıtı olarak gönderilir seccessfully doğrulanır eğer kimlik doğrulama için pasaport yerel yöntemi kullanmak açısal yan düşünce sonrası yönteminden bir hit ..

İlgili konular