Tôi phải biết khi nào Serialize và Deserialize gọi, để kiểm tra tôi đã đặt alert(user.id)
nhưng không có hành động nào xảy ra.Khi Serialize và Deserialize gọi trong hộ chiếu js
Tôi có một số thắc mắc:
- Từ nơi
user
đối tượng đã nhận được trongpassport.serializeUser(function(user, done){...
- vai trò gì chơi
process.nextTick()
đây - Làm thế nào để gọi hàm callback tức,
function(req, email, password, done)
, nếu tôi gửi nhiều hình thức giá trị ví dụ (tên, email, mật khẩu, địa chỉ, điện thoại di động).
Đây là mã: -
//config/passport.js
var LocalStrategy = require('passport-local').Strategy;
var User = require('../app/models/user');
module.exports = function(passport) {
passport.serializeUser(function(user, done) {
alert(user.id);//// Here is my testing alert
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function(err, user) {
done(err, user);
});
});
passport.use('local-signup', new LocalStrategy({
usernameField : 'email',
passwordField : 'password',
passReqToCallback : true
},
function(req, email, password, done) {
process.nextTick(function() {
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);
newUser.save(function(err) {
if (err)
throw err;
return done(null, newUser);
});
}
});
});
}));
}
Tôi có một câu hỏi, khi bạn nói: "passport.initialize() và passport.session() ... họ là những người gây ra serializeUser để tải id người dùng ** để req.user nếu một người dùng serialized được tìm thấy trong máy chủ (whe n sử dụng mongodb, nếu người dùng tồn tại trong mongodb). ** "Id người dùng đến từ đâu và khi bạn nói" nếu người dùng tồn tại trong mongodb ", Liệu nó có tự động tìm trong Mô hình người dùng không? –
Trình tái cấu trúc mã của bạn có thể là' if (req.url.match ('/ xxx ')) passport.session(); next(); ' – NERDYLIZARD