0
我正在使用passport.js和LocalStrategy方法在node.js中爲我的項目進行基本身份驗證。它甚至還沒有密碼驗證。帳戶存儲在MongoDB實例中。來自angular.js的POST不起作用,但直接從窗體工作。爲什麼?
我被困了整整一天當我當然要通過教師推薦的表單數據綁定到角,並從那裏發送$http.post()
,就像這樣:
$scope.signIn = function (username, password) {
$http.post('/login', {username: username, password: password})
.then(function (res) {
if(res.data.success) {
console.log('Logged in');
} else {
console.log('error logging in');
}
})
};
下面是它的路線:
app.post('/login', function (req, res, next) {
var auth = passport.authenticate('local', function (err, user) {
if(err) { return next(err); }
if(!user) { res.send({success: false, user: user}); }
req.login(user, function (err) {
if(err) { return next(err); }
res.render('index', { success: true, user: user });
});
});
auth(req, res, next);
});
除了總是返回{success:false,user:false}。谷歌上搜索噸後,我決定直接從形式作出POST請求:
JADE:
.navbar-right(ng-controller='navbarLoginCtrl')
form.navbar-form(action='/login' method='post')
.form-group
input.form-control(name='username' placeholder='username', ng-model='username' required)
.form-group
input.form-control(name='password' type='password', placeholder='password', ng-model='password' required)
button.btn.btn-default(type='submit' value="Submit") Sign in
,而不是:
.navbar-right(ng-controller='navbarLoginCtrl')
form.navbar-form
.form-group
input.form-control(name='username' placeholder='username', ng-model='username' required)
.form-group
input.form-control(name='password' type='password', placeholder='password', ng-model='password' required)
button.btn.btn-default(ng-click='signIn(username, password)') Sign in
提交方法確實有效,但我」 d喜歡保持乾淨的東西,並做到有角度。 我該怎麼辦?參考
其他passport.js組件:
var User = mongoose.model('User');
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);
}
});
});
passport.use(new LocalStrategy(
function (username, password, done) {
User.findOne({username: username}, function (err, user) {
if (user) return done(null, user);
else return done(null, false);
});
}
));
謝謝,這個伎倆。慚愧,這絕對沒有提到它,甚至passport.js文檔。我只是假定body-parser會爲我處理這件事。 任何想法,爲什麼它可以在早期版本的Express/node中工作而不明確specyfing內容類型? – Ketus
絕對不知道我只知道表單發佈和角度發佈的區別:) – Walfrat