Xin lưu ý rằng tôi là người mới bắt đầu ở Node.js vì vậy hãy kiên nhẫn với tôi :)Node.js và Passport Object không có phương thức validPassword
Tôi đang sử dụng Node.js + Express 3 + Passport để tạo ra một xác thực đơn giản (địa phương) chỉ để chơi xung quanh
và những gì tôi đã đạt được cho đến nay rằng khi một username hoặc password sai vào dùng được chuyển hướng đến một trang lỗi
nhưng khi người dùng nhập vào một đúng tên người dùng và mật khẩu Tôi nhận được lỗi này
node_modules\mongoose\lib\utils.js:435
throw err;
^
TypeError: Object { _id: 50b347decfd61ab9e9e6768f,
username: 'saleh',
password: '123456' } has no method 'validPassword'
Tôi không chắc chắn có chuyện gì đó
app.js (tôi loại bỏ các mã không cần thiết):
var passport = require('passport')
, LocalStrategy = require('passport-local').Strategy;
app.configure(function(){
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(passport.initialize());
app.use(passport.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
});
var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'authTest');
var authSchema = mongoose.Schema({
username: 'string',
password: 'string'
});
var User = db.model('users', authSchema);
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) {
return done(null, false, { message: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
app.post('/login',
passport.authenticate('local', { successRedirect: '/',
failureRedirect: '/login/error',
})
);
và bây giờ trong các tuyến đường/login.js
var mongoose = require('mongoose');
var db = mongoose.createConnection('localhost', 'authTest');
var authSchema = mongoose.Schema({
username: 'string',
password: 'string'
});
var User = db.model('users', authSchema);
exports.index = function(req, res){
User.find(function (err, list) {
res.render('login', { title: 'Usernames and Passwords', users: list,msg:""});
});
};
Cảm ơn bạn đã dành thời gian.
Cảm ơn :) nó hoạt động ngay bây giờ –
Một câu hỏi khác nếu bạn có thể .. bạn có thể giới thiệu cho tôi sách hoặc tài nguyên để tìm hiểu Node.js tốt hơn không? –
@MuhammadSaleh Tôi không biết bất kỳ cuốn sách Node.JS nào. Tôi đã học được mọi thứ bằng cách liên tục googling. Bắt đầu với hướng dẫn trên [Trang chính Node.JS] (http://nodejs.org/). Và sau đó chỉ cần google. Stackoverflow cũng là một nguồn kiến thức tuyệt vời. Đó là cách tôi đã học được nó. – freakish