10

Sails JS アプリケーションがあります。Passport.js 認証レイヤーSails-generate-authを使用して認証をセットアップしようとしています。ドキュメントに記載されている手順に従って、アプリを構成しました。

しかし、Sails アプリを持ち上げると、認証が機能しません。ログインしていなくても、コントローラーにアクセスできます (ログインページにリダイレクトされません)。

次のようにconsole.logステートメントを追加しました。api/policies/passport.js

module.exports = function (req, res, next) {
  passport.initialize()(req, res, function () {
    passport.session()(req, res, function () {
      res.locals.user = req.user;
      console.log(req.user); // added by me
      next(); 
    });
  });
};

これで、ログイン前またはログアウト後にコントローラーにアクセスすると、その印刷undefined. しかし、ログインすると、ユーザーデータが印刷されます。認証をチェックしていない理由は何ですか?

私はローカル認証戦略を使用しており、他のすべて (twitter、facebook など) をコメントアウトしています。

4

2 に答える 2

12

上記の回答は有用な情報を提供します。それについて詳しく説明したいと思います。

ユーザーがログインしていない場合、デフォルトでは、sails-generate-auth はコントローラーへのアクセスを拒否しません。そのために、 で別のポリシーを作成できますapi/policies/。例:sessionAuth次のようにポリシーを作成します。

module.exports = function(req, res, next) {
  if (req.user) {
    return next();
  }

  return res.forbidden('You are not permitted to perform this action.');
};

禁止されたページを表示する代わりに、ログイン ページをレンダリングすることもできます。そのためには、AuthController.login にアクセスする必要があります。したがって、次のようにポリシーを追加config/policiesします。

'*': ['passport', 'sessionAuth'],

'auth': {
  '*': ['passport']
}

これは、ユーザーがログインしていない場合、ログイン、ログアウト、登録などの認証コントローラーを除くすべてのコントローラーへのアクセスを制限するのに役立ちます。

于 2014-11-28T06:18:15.023 に答える
6

Passport には、コントローラーへのアクセスを拒否するポリシーがありません。このためには、別のポリシーを作成する必要があります。

詳細については、このリンクを参照してください。

于 2014-11-28T05:08:02.710 に答える