0
所以我想添加本地身份驗證到我的MEAN堆棧應用程序。 一切都運轉平穩。註冊很好。但我無法以用戶身份登錄。MEAN堆棧身份驗證與護照:登錄不工作(但我可以創建新用戶)
我越來越: POST /登錄302 3.979毫秒 - 58 控制檯(通過摩根) 上,但肯定是有錯誤(快遞路線的「failureRedirect」通過護照設置)
莫非從數據庫讀取問題?爲什麼我能寫它,然後...
與薛寶釵的測試表明,該方案不能從DB通過用戶模式「找到電子郵件用戶」
任何人有任何線索,爲什麼發生這種情況?
這是我的護照戰略代碼:
/config/passport.js
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/users');
module.exports = function(passport) {
// passport session setup ==================================================
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
// local login =============================================================
passport.use('local-login', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
User.findOne({ 'local.email' : email }, function(err, user) {
if (err)
return done(err);
if (!user)
return done(null, false, req.flash('loginMessage', 'No user found.'));
if (!user.validPassword(password))
return done(null, false, req.flash('loginMessage', 'Oops! Wrong password.'));
return done(null, user);
});
}));
// local sign up =============================================================
passport.use('local-signup', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
User.findOne({ 'local.email' : email }, function(err, user) {
if (err)
return done(err);
if (user) {
return done(null, false, req.flash('signupMessage', 'That email is already taken.'));
} else {
var newUser = new User();
newUser.local.email = email;
newUser.local.password = newUser.generateHash(password); // use the generateHash function in our user model
newUser.save(function(err) {
if (err)
throw err;
return done(null, newUser);
});
}
});
}));
};
這裏的路線:
// /login ======================================================================
app.route('/login')
.get(function(req, res) {
res.setHeader('Content-Type', 'text/html');
res.render('login.html');
})
.post(passport.authenticate('local-login', {
successRedirect : '/profile',
failureRedirect : '/'
}));
// /signup ======================================================================
app.route('/signup')
.get(function(req, res) {
res.setHeader('Content-Type', 'text/html');
res.render('signup.html');
})
.post(passport.authenticate('local-signup', {
successRedirect : '/profile',
failureRedirect : '/'
}));
顯示您的登錄表單,它是否包含電子郵件和密碼? – 2015-02-23 07:25:10
我建議一些控制檯日誌記錄,以確切地看到傳遞給查找調用的內容。另外,你比較「像喜歡」嗎?區分大小寫可能是一個問題,例如:您是否在以小寫字母搜索電子郵件地址(類似地以小寫字母存儲)? – Ben 2015-02-23 13:41:28
想通了......我的表格沒有名字attrs – 2015-02-23 15:01:15