32

私は、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 戦略を記述する必要があります。やり過ぎのようです。

他のオプションは、ユーザーが認証された後、各ルートでアクセス/グループを確認することです。しかし、可能であればミドルウェアでこれを行うことをお勧めします。

ありがとう

4

1 に答える 1