SPA认证AngularJS - > PassportJS - > MongoDB的

时间:2014-10-13 11:53:35

标签: node.js angularjs mongodb

我正在尝试在SPA页面上设置Passport几天。在客户端,我使用AngularJS $ http,通常它正在工作。

angular.module('Factory', []).factory('MainFactory', ['$http',function($http) {
    return {
        RegisterNewAccount : function(AccountInformation) {
            return $http.post('/api/PageSignup', AccountInformation);
        }
    }
}]);
angular.module('Controllers', [])
.controller('MainPage', ['$scope','MainFactory', function($scope, MainFactory) {
    $scope.Signup = function(){
        var account = {
            email: $scope.RegisterEmail,
            password: $scope.RegisterPassword
        };
        MainFactory.RegisterNewAccount(account)
        .success(function(data) {
            console.log(data);
        });
    };
}]);

我的问题是在服务器端代码,我是护照的新手,仍然无法弄清楚如何使其工作没有重定向的事情。我的护照设置如下:

var passport = require('passport');
var LocalStrategy= require('passport-local').Strategy;
passport.use('local-signup', new LocalStrategy({
    usernameField : 'email',
    passwordField : 'password',
    passReqToCallback : true
},
function(req, email, password, done) {
    if (email) email = email.toLowerCase();
    process.nextTick(function() {
        if (!req.user) {
            User.findOne({ 'local.email' :  email }, function(err, user) {
                if (err) return done(err);
                if (user) return done(null, false, { message: 'That email is already taken.' });
                else {
                    var newUser            = new User();
                    newUser.local.email    = email;
                    newUser.local.password = newUser.generateHash(password);
                    newUser.save(function(err) {
                        if (err) return done(err);
                        return done(null, newUser);
                    });
                }
            });
        } else if ( !req.user.local.email ) {
            User.findOne({ 'local.email' :  email }, function(err, user) {
                if (err) return done(err);       
                if (user) {
                    return done(null, false, { message: 'That email is already taken.'});
                } else {
                    var user = req.user;
                    user.local.email = email;
                    user.local.password = user.generateHash(password);
                    user.save(function (err) {
                        if (err)
                            return done(err);

                        return done(null,user);
                    });
                }
            });
        } else {
            return done(null, req.user);
        }
    });
}));
var app      = express();
app.post('/api/PageSignup', function(req, res, next) {
  passport.authenticate('local-signup', function(err, user, info) {
    if (err) { return next(err) }
    if (!user) {
      return res.send(info.message);
    }
    req.logIn(user, function(err) {
      return res.send(user);
    });
  })(req, res, next);
});

如果有关护照的SPA认证有明确的例子请告诉我。 Overwise你能告诉我我在服务器端代码中的错误吗?

0 个答案:

没有答案