私はExpress/Mongoose web-appにpassport-localを正常に実装しましたが、失敗したログインメッセージを適切にレンダリングする方法がわかりません。私は無効なログインを報告することになっていますどのようなルートでExpressとPassportJSで無効なログインを正しく報告するにはどうすればよいですか?
app.get('/login', function(req, res) {
res.render('user/login', {
});
});
:
は、ここに私のログインルートですか?ログインが成功した場合、は、req.user
オブジェクトには"GET /login"
のルートに役立ちません。成功すると、行きたいページにリダイレクトされるためです。
req.user
は、ログインページGET
の場合、常にundefined
となります。
「yo、invalid login!」のようなメッセージを書き出すことができます。
- ユーザーは存在しません。
- 指定されたパスワードは一致しませんが、ユーザーは存在しています。
何が発生したかによって、別のメッセージを出力したいことがあります。あなたはそこにいくつかの問題があるが、これはPassportJSの著者は彼のアプリケーションを設定する方法である見ることができるように
passport.use(new LocalStrategy({
usernameField: 'email'
},
function(email, password, fn) {
User.findOne({'login.email': email}, function(err, user) {
// Error was thrown.
if (err) {
return fn(err);
}
// User does not exist.
if (!user) {
return fn(null, false);
}
// Passwords do not match.
if (user.login.password != utility.encryptString(user.login.salt + password)) {
return fn(null, false);
}
// Everything is good.
return fn(null, user);
});
}
));
:私はLocalStrategyを実装する場合
私はこのコードを使用していました。どのように戦略が返すものにアクセスする必要がありますか?
エラーが発生した場合は、err
にアクセスするために何を呼び出す必要がありますか?
ありがとうございました。
ああ、カスタムコールバックのアプローチはうまくいくように見えます。ありがとう。 両方の代替ソリューションはどのように同じことをしますか? POSTリクエストで成功/失敗のリダイレクトの例を実行しませんか?それが私がatmしていることです。 もう1つの方法は、ページにアクセスするためのログインを強制する標準的な方法です。同様に、これはアクセスを制御したいページ(ユーザープロファイルなど)に置くものです。 私はあなたをカスタムコールバックの回答としてマークします。 – AntelopeSalad
「認証の成功または失敗にどのように対応できますか?」という質問をしましたが、これらの3つの方法は異なる方法です。代替案では、応答を処理するためにクライアントを別のルートに送信しているだけです。実装の詳細がわからないので、最適なものを決定するのはあなた次第です。はい、オプション3は、認証が必要なページの認証を強制するのに最適な方法です。 –