在我的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'));
答案 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);
}
})
});