だから私はパスポートローカルとエクスプレスを使ってユーザーログインを処理しています。これまでのところ、ユーザー名を使用して正常にログインできましたが、ユーザー名は覚えにくく、個人的にはユーザーを処理するために使用する必要はないと思うので、パスポートで提供されているサンプル戦略を変更してみました-電子メールでユーザーを確認するためのローカル ページですが、コードは機能しません。
私がメールに対して持っている戦略は次のとおりです。
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' });
}
});
});
}));
そして、それはこの戦略から派生しています:
//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' });
}
});
});
}));
したがって、ユーザー名戦略は完全に機能しますが、電子メール戦略はそうではありません. ユーザー名と電子メール戦略の両方に console.log() を残して、戦略が何を返しているかを確認しました。ユーザー名戦略はユーザーに関するすべての情報を返しますが、電子メール戦略は戻ります
間違い
. このサイトがこれを行っている理由がわかりません。これまでに見た解決策はどれも機能しません。
別の投稿で見た 1 つの解決策では、
findOne({email: email}, function(err, user){
});
メールでログインしてユーザーを見つけるオプションがありますが、まったく機能していません。
ユーザーからの入力を取得するために使用する Jade ファイルは次のとおりです。
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
そして、ここに POST 入力があります:
// 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);
};
ここで一体何が起こっているのですか?電子メールを使用すると、完全に機能するはずです。あと、質問なので、登録後のメールはどうやって確認すればいいですか?