如何使用angular度节点应用程序的护照?

我正在基于angular.js + node.jsmongodb使用快速模板的简单博客网站上工作。 我通过POST方法使用angular控制器中的$http将其命名为users.js ,其中login使用passport.authenticate方法进行身份validation。 我需要在users.js护照本地login策略。
但它不工作。有angular度login服务代码和节点用户api代码。 任何人都可以告诉我如何在angular度和节点中使用passport.js

通过服务的angular度路由

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

用户中的节点路由

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

护照本地策略

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

所以我想使用护照进行身份validation,但使用客户端模板/路由保持适当的身份validation。

有人能指点我的方向吗? 或者告诉我,我在做什么是完全错误的?

编辑:我用我的代码得到的错误是它不redirect到configuration文件页面

TypeError:POST http:// localhost:3000 / users / login 500内部服务器错误

不是有效的用户

       

网上收集的解决方案 "如何使用angular度节点应用程序的护照?"

默认情况下, LocalStrategy期望字典参数被命名为usernamepassword

如果你想使用email而不是username ,那么你应该在你的策略中定义它们:

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

对于你的情况,应该是:

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

我find了解决我的问题..如何使用护照与angular度nodejs路由…….

  //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方法,并击中节点(users.js)控制器,并从中获得响应。 如果用户authentication成功,则重定位到configuration文件视图,否则保持在login视图。

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

如果用户validation成功,则使用passport-local方法进行身份validation,然后通过身份validation的用户作为响应发送。