Vì vậy, tôi đang sử dụng hộ chiếu địa phương và thể hiện để xử lý đăng nhập của người dùng. Cho đến nay tôi đã có thể đăng nhập thành công khi sử dụng tên người dùng nhưng tên người dùng rất khó nhớ và cá nhân tôi không nghĩ rằng họ nên được sử dụng để xử lý người dùng, vì vậy tôi đã thử sửa đổi Chiến lược mẫu được cung cấp trên hộ chiếu- trang địa phương để xác nhận người dùng qua email nhưng mã không hoạt động.Sử dụng email với Hộ chiếu địa phương. Trợ giúp trước đó không hoạt động
Chiến lược tôi có cho email là:
passport.use(new LocalStrategy(function(email, password, done) {
User.findOne({ email: email }, {}, function(err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false, { message: 'Unknown user ' + e }); }
user.comparePassword(password, function(err, isMatch) {
if (err) return done(err);
if(isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Invalid password' });
}
});
});
}));
Và Nó bắt nguồn từ chiến lược này:
//The login strategy
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: 'Unknown user ' + username }); }
user.comparePassword(password, function(err, isMatch) {
if (err) return done(err);
if(isMatch) {
return done(null, user);
} else {
return done(null, false, { message: 'Invalid password' });
}
});
});
}));
Vì vậy, chiến lược tên làm việc hoàn toàn tốt đẹp, nhưng email người ta không là. Tôi thậm chí còn để lại một console.log() trong cả tên người dùng và chiến lược email để xem chiến lược nào đã trở lại. Chiến lược Tên đăng nhập trả về tất cả các thông tin về người sử dụng, trong khi các chiến lược email trả
sai
. Tôi không biết tại sao trang web lại làm điều này và không có giải pháp nào mà tôi đã thấy cho đến nay.
Một giải pháp tôi đã nhìn thấy trên bài khác gợi ý rằng tôi chỉ sử dụng các tùy chọn
findOne({email: email}, function(err, user){
});
đăng nhập bằng email để tìm ra người sử dụng, nhưng nó đã không được làm việc ở tất cả.
Dưới đây là file Jade tôi sử dụng để lấy đầu vào từ người sử dụng:
extends layout
block content
h1 Login
form(action= '/login', method='post')
p Email
br
input#email(type='text',value='',placeholder='@',name='email')
p Password
br
input#password(type='password',value='',placeholder='Password',name='password')
input(type='submit') Submit
Và đây là POST đầu vào:
// POST /login
// This is an alternative implementation that uses a custom callback to
// acheive the same functionality.
exports.postlogin = function(req, res, next) {
passport.authenticate('local', function(err, user, info) {
if (err) { return next(err) }
if (!user) {
req.session.messages = [info.message];
return res.redirect('/login')
}
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/');
});
})(req, res, next);
};
Cái quái gì đang xảy ra ở đây? Với email, nó sẽ hoạt động hoàn hảo. Kể từ khi tôi hỏi một câu hỏi nào, làm thế nào để tôi xác nhận email sau khi ai đó đã đăng ký?
Tôi thề có phép thuật trong lưu lượng truy cập.Lâu nhất tôi đã cố gắng để làm việc với vấn đề này. Tôi thậm chí đã thử ví dụ bạn đã đăng trước đó, không có gì làm việc cho đến bây giờ. Cảm ơn nhiều! – Kivo360
'passwordField' phải là' mật khẩu' imo –