0

ユーザーがログインしたかどうかを確認するために、変数 current_user をグローバルに実装したいので、私はミドルウェアを追加します

app.use(require('./controller/user').auth_user);

user.js で、auth_user use res.locals というメソッドを定義し、グローバル ローカル current_user を設定します。そして、req.session.user=user を設定します。

exports.auth_user = function(req, res, next) {
  if (req.session.user) {
    res.locals('current_user', req.session.user);
    return next();
  } else {
  var cookie = req.cookies['user_cookie'];
  if (!cookie){
    res.locals('current_user', "");
    return next();
  };
  var auth_token = decrypt(cookie, 'user_session');
  var auth = auth_token.split('\t');
  var user_email=auth[3].toLowerCase();
  User.findOne({'email': user_email},function(err, result) {
    if(err) return next(err);
    if (result) {
      req.session.user = result;
      res.locals('current_user', req.session.user);
      return next();
    }else{
      return next();
    }
  });
  }
};

ということで、req に user オブジェクトを入れてデバッグしたところ、req から user.hashed_pa​​ssword を取得できることがわかりました。安全ではないと思います。ブラウザ側のユーザーはこの情報を取得できますか?

4

1 に答える 1

0

他の場所に情報を公開しない限り、これは安全です。req少なくとも、ブラウザがオブジェクトにアクセスできないという観点からは。

reqとにかく、別の質問は、ユーザー オブジェクトの特定の部分だけが必要な場合に、完全なユーザー オブジェクトをオブジェクトにアタッチするのが最善かどうかということです。ハッシュを含まない、そのオブジェクトの簡素化されたバージョンを添付しないのはなぜですか?

その後、ブラウザが仮想的にアクセスできるかどうかに関係なく、問題は解決しました。

于 2013-04-18T07:18:54.183 に答える