1

私は最初にこれを使用しました:

var app = express.createServer(
  express.cookieParser(),
  express.session({ secret: 'somesecretword' })
);

以下のコードは、una​​meをキーとしてユーザーの詳細を取得するためのサンプルコードです。

model.fetch()を呼び出すことにより、バックボーンモデルのURLからこのコードを呼び出します。

app.get('/user/:uname/', function (req, res) {

  var uname=req.params.uname;
  if(!req.session.user)   // check if logged in
  res.send("Not Logged In");

  return UserModel.find({uname : uname},function(err, user) {
    if (!err) {
      return res.send(user);
    } else {
      return res.send(err);
    }
  });
});

そこで、ここでは、上記のgetメソッドでセッションを直接検証するためのコードを記述しました。

そのような方法がたくさんある場合はどうなりますか?すべてのメソッドで同じことを書く必要がありますか、それともこれを機能させるコントローラーがノードにありますか?

たとえば、パス「/ user」を検証するコントローラーを表示します。これは、「/ user / anythinghere /」を自動的に検証するか、他のより良い方法を表示する必要があることを意味します。

4

2 に答える 2

2

必要なのは、app.getメソッドで渡すためのある種のミドルウェアです。私自身はまだNode.jsを学習しているので、コードブロックを正確に書き直すことはできませんが、Expressのドキュメントからこれを学習しています(ニーズに合わせて少し変更しました)

function requireAuth(req, res, next) {
  if(req.session.user) {
    next();
  } else {
    next(new Error('Failed to load user ' + req.params.id));
  }
}

app.get('/user/edit/:id', requireAuth, function(req, res){
  res.send('you can see this because you are authed');
});

app.get('/', function(req, res){
  res.send('Not requiring auth on homepage');
});

ここのドキュメントは、私ができるよりもそれをよりよく説明しています:

http://expressjs.com/guide.html#route-middleware

これがお役に立てば幸いです。:)どちらかといえば、私自身がこれに答える何か新しいことを学んだので、ありがとう:D

于 2012-04-15T11:20:06.733 に答える
1

ミドルウェアを使用して、次のようなルートに配置できます。

app.get('/user/edit/:id', requireAuth, function(req, res){
  res.send('you can see this because you are authed');
});

または、ワイルドカードを使用して次のようにします。

app.all("/api/private*", ensureAuthenticated);

これについて詳しくは、 https: //fabianosoriani.wordpress.com/2011/08/15/express-api-on-node-js-with-mysql-auth/をご覧ください。

于 2012-09-01T01:30:52.577 に答える