私は、passport.js を使用して、ユーザーが特定のエンドポイントにアクセスしたときに、そのユーザーが正しいパスワードを持っているだけでなく、特定のグループのメンバーであるか、特定のアクセス権を持っていることを確認したいと考えています。
簡単にするために、アクセス レベルが USER と ADMIN であるとします。
パスポートを使用してパスワードを認証できます。
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: 'Incorrect username.' });
}
if (!user.validPassword(password)) {
return done(null, false, { message: 'Incorrect password.' });
}
return done(null, user);
});
}
));
次に、ルートを使用して、ユーザーが認証を通過することを確認できます。
app.get('/api/users',
passport.authenticate('local'),
function(req, res) {
res.json({ ... });
});
ただし、/api/users にアクセスするには ADMIN アクセス権が必要だとしましょう。自分の戦略を書く必要がありますか? IE では、ローカル ユーザー戦略とローカル管理戦略を用意し、それぞれで適切なアクセス レベルを確認する必要がありますか?
これはかなり簡単にできると思いますが、サイトにさまざまな認証方法が必要な場合に問題が発生します (場合によっては oauth を使用することもあります)。それぞれにカスタムの *-user、*-admin 戦略を記述する必要があります。やり過ぎのようです。
他のオプションは、ユーザーが認証された後、各ルートでアクセス/グループを確認することです。しかし、可能であればミドルウェアでこれを行うことをお勧めします。
ありがとう