2016-08-05 9 views
1

私はscotch.ioにthis documentを読みますが、トークンは、次の()メソッドNodeJs next()メソッドでTokenが正しいときはどうなりますか?

apiRoutes.use(function(req, res, next) { 

    // check header or url parameters or post parameters for token 
    var token = req.body.token || req.param('token') || req.headers['x-access-token']; 

    // decode token 
    if (token) { 
     // verifies secret and checks exp 
     jwt.verify(token, app.get('superSecret'), function(err, decoded) {   
      if (err) { 
       return res.json({ success: false, message: 'Failed to authenticate token.' });  
      } else { 
       // if everything is good, save to request for use in other routes 
       req.decoded = decoded; 
       next(); 
      } 
     }); 

    } else { 
     ... 
    } 

}); 

apiRoutes.get('/', function(req, res) { 
    ... 
}); 

apiRoutes.get('/users', function(req, res) { 
    ... 
}); 

apiRoutes.get('/check', function(req, res) { 
    ... 
}); 

app.use('/api', apiRoutes); 

app.listen(port); 

ユーザー必見の後に起こる何が正しいとき、私は理解して傾ける、JSONウェブトークンとのNode.jsのAPIを認証使用して初心者ですその後に他のリクエストを渡す(私の平均はトークンが正しいのです)?

私はこのサンプルコード/ルートがチェックトークンの後にコールされると思いますが、それは正しいですか?次の呼び出しのために他のメソッドを選択するにはどうすればいいですか?

答えて

1

実際にnext()は次のステップのためにnode.jsの非同期ループに入ることを尋ねます。 Javascriptは実際にはシングルスレッドなので、次にスタックに配置されたメソッドを呼び出します。 next()を呼び出さなければ、あなたのプログラムはスタックします。 .use

この特定のシナリオでは、このトークンミドルウェアによって検証された後、次のルートが呼び出されます。このトークンミドルウェアは、無名関数として渡されます。

もこの方法 javascript node.js next()

+0

を見て、私はOK、このサンプルコード '/'ルートはトークンのチェック後に呼び出しされ、それが正しかったではないでしょうか? '/'は 'next()'の後に呼び出しているので、私は他の呼び出し方法を選択することができます –

+0

それはコール/ルートを呼び出す必要はありません。ユーザーが実行し、apiRouterを使用しているすべてのメソッドは、このミドルウェアを経由します。それは//users/whateverなどです。 – owaishanif786

+0

これはミドルウェアであり、自動的に呼び出されるリクエストごとに正しいのですか?それ以降は、オフコースで –

関連する問題