私はpassport-localとexpressを使ってユーザログインを処理しています。これまでのところ、ユーザー名を使用しながらログインに成功しましたが、ユーザー名は覚えにくいので、個人的にはユーザーの操作に使うべきではないと思うので、パスポート関連のサンプル戦略を修正しました。ローカルページで電子メールでユーザーを確認できますが、コードは機能しません。Passport-localで電子メールを使用します。以前の助けが役に立たなかった
私は電子メールを持っている戦略は次のとおりです。
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' });
}
});
});
}));
ので、ユーザ名の戦略は完全に正常に動作しますが、電子メールの1ではありません。私はユーザ名とメール戦略の両方でconsole.log()を残して、どのような戦略が戻ってきたのかを見ていました。電子メールの戦略は
偽
を返しながら、ユーザー名の戦略は、ユーザーのすべての情報を返します。私はなぜサイトがこれをやっているのか分かりません。私は別のポストに見てきた
一つの解決策は、私は、ユーザーを見つけるために電子メールでログインする
findOne({email: email}, function(err, user){
});
オプションを使用することを示唆したが、それがすべてで働いていません。ここで
ジェイドは、私は、ユーザからの入力を取るために使用するファイルです。
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);
};
一体ここで何が起こっていますか?電子メールでは完全に動作するはずです。とにかく私は質問をしているので、誰かが登録した後でどのようにメールを確認するのですか?
私はそこに魔法があることを誓います。一番長い間、私はこの問題を解決しようとしました。私はあなたが前に投稿した例を試しましたが、今まで働いたことはありませんでした。どうもありがとうございました! – Kivo360
'passwordField'は' password'です。imo –