无法获得passport.js工作。无法获得用户

时间:2014-07-11 17:56:37

标签: angularjs node.js mongodb express passport.js

在我的mongodb中,显然有一个用户名为" testuser",但我仍然无法登录!"当我输入时。注意:尚未使用密码。只是想确保我可以先检查输入的用户名是否存在。

导航栏-login.jade

.navbar-right(ng-controller="mvNavBarLoginCtrl")
    form.navbar-form 
        .form-group
            input.form-control(placeholder="email", ng-model="username")
        .form-group
            input.form-control(type="password", placeholder="password", ng-model="password")
        button.btn.btn-primary(ng-click="signin(username, password)") Sign In

mvNavBarLoginCtrl.js(我一直在"无法登录!",这意味着{success:false},我认为这意味着用户没有找到)

angular.module('app').controller('mvNavBarLoginCtrl', function($scope, $http) {             
    $scope.signin = function(username, password) {
        $http.post('/login', {username:username, password:password}).then(function(response) {
            if(response.data.success) {
                console.log("logged in!");
            }
            else {
                console.log("failed to login!");
            }
        })
    }
});

routes.js(我得到"没有找到用户。")

app.post('/login', function(req, res, next) {
    var auth = passport.authenticate('local', function(err, user) {
        if(err) {return next(err);}
        if(!user) {
            console.log("no user found.");
            res.send( {success:false} );
        }

        // we are using XHR and not a form to login so we gotta do this
        req.logIn(user, function(err) {
            if(err) {return next(err);}
            res.send( {success:true, user:user} ); 
        })
    })

    auth(req, res, next); 
})

server.js

var User = mongoose.model('User'); 
passport.use(new LocalStrategy(
    function(username, password, done) {
        User.findOne( {'username': username} ).exec(function(err, user) {
            console.log(user);
            if(user) {
                return done(null, user); 
            }
            else {
                return done(null, false); 
            }
        });
    }
));

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

passport.deserializeUser(function(id, done) {
    User.findOne( {_id: id} ).exec(function(err, user) {
        if(user) {
            return done(null, user); 
        }
        else {
            return done(null, false); 
        }
    })
});

express.js config(不确定我是否使用Express 4做到了这一点)

app.set('views', config.rootPath+ '/server/views'); 
app.set('view engine', 'jade'); 

app.use(morgan('dev')); 

app.use(cookieParser());
app.use(bodyParser.urlencoded({extended:true})); 
app.use(session({secret: '<mysecret>', saveUninitialized: true, resave: true}));

app.use(passport.initialize()); 
app.use(passport.session()); 

app.use(stylus.middleware(
    {
        src: __dirname + '/public', 
        compile: compile
    }
));
app.use(express.static(config.rootPath + '/public')); 

2 个答案:

答案 0 :(得分:1)

passport.use(新的LocalStrategy ...)没有被调用。

这与新的Express 4配置有关。我需要将bodyParser.json()添加到express.js:

app.use(bodyParser.json()); // parse application/json 
app.use(bodyParser.urlencoded({ extended: true })); // parse application/x-www-form-urlencoded

我无法找到任何相关文档。所有的passport.js文档似乎都已过时,仅供Express 3使用,只需要app.use(express.bodyParser());.如果其他人遇到此问题,中间件配置是罪魁祸首。

答案 1 :(得分:0)

如果用户名未定义,您可以签入passport.js文件吗?只是console.log那个。

如果它显示未定义,请检查您的mongodb数据库以查看是否实际保存了任何内容。抓住robomongo检查这个。 http://robomongo.org/

var User = mongoose.model('User'); 
passport.use(new LocalStrategy(
    function(username, password, done) {
        /*Check if these values exist, if they do something is wrong in mongodb*/
        console.log('THIS IS THE USERNAME', username);
        console.log('THIS IS THE PASSWORD', password);
        User.findOne( {'username': username} ).exec(function(err, user) {
            console.log(user);
            if(user) {
                return done(null, user); 
            }
            else {
                return done(null, false); 
            }
        });
    }
));

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

passport.deserializeUser(function(id, done) {
    User.findOne( {_id: id} ).exec(function(err, user) {
        if(user) {
            return done(null, user); 
        }
        else {
            return done(null, false); 
        }
    })
});