2016-06-21 12 views
0

私のサーバーには、登録後にトークンを提供する登録apiと、ユーザーのトークンを認証するミドルウェアがあります。自分のサーバーで何か他のことをするトークンを取得するには、アカウントを登録する必要があります。しかし、まだトークンがないので、ミドルウェアは自分のネットワーク要求をブロックします。Expressミドルウェアjsonwebtoken認証

この場合、アカウントとトークンを作成するにはどうすればよいですか?いくつかのトリックでミドルウェアを渡す?

ミドルウェア:

// Middleware to verify token, it will be called everytime a request is sent to API 
    api.use((req, res, next)=> { 
    var token = req.headers.token 
    if (token) { 
     jwt.verify(token, secret, (err, decoded)=> { 
     if (err) { 
      res.status(403).send({ success: false, message: "Failed to authenticate user." }) 
     } else { 
      req.decoded = decoded 
      next() 
     } 
     }) 
    } else { 
     res.status(403).send({ success: false, message: "No Token Provided." }) 
    } 
    }) 

サインインも:

// Sign In with email API 
    api.post('/signInWithEmail', (req, res)=> { 
    User.findOne({ 
     email: req.body.email 
    }).select(userFields).exec((err, user)=> { 
     if(err) { 
     throw err 
     } 
     if (!user) { 
     res.send({ message: "User doesn't exist"}); 
     } else if (user) { 
     var validPassword = user.comparePassword(req.body.password); 
     if (!validPassword) { 
      res.send({ message: "Invalid Password"}); 
     } else { 
      var token = createToken(user); 
      res.json({ 
      success: true, 
      message: "Login Successfully!", 
      token: token 
      }) 
     } 
     } 
    }) 
    }) 
+1

なぜあなたはこれにパスポートを使用しないのですか? –

答えて

0

トークンを確認し、認証されたルートを呼び出す必要がある時はいつでも、あなたがトークンをチェックすることがありますよう、あなたのルートを公開する機能を作りますまず経路を公開します。

サンプルコード

のは、これが

function checkToken(req, res, next) { 
var x = req.token; //This is just an example, please send token via header 
    if (x === token) 
    { 
     next(); 
    } 
    else 
    { 
     res.redirect(/unauthorized); //here do whatever you want to do 
    } 
    } 

は、今度は、ルートの機能を使ってみましょう私のチェックトークン機能であるとしましょう。あなたが異なるコード用に別のルートを持っているしたいのですか、他あなたはちょうどあなたが持っているものは何でも、app.jsまたはserver.jsすなわちメインファイル上の機能などでそれらを保つことを経由して、特定のコードブロックを呼び出すことができるかどう

app.post('/protectedroute', checkToken, routename.functionname); 
app.post('/notprotected', routename.functionname); 

は、それはあなたの呼び出しです選ばれた

私たちはここで実際に何をしているのですか?コードブロックまたは機能のチャネルを通じて私たちのルートを公開するために私たち自身のミドルウェアを作っています。

+0

この方法で動作します!おかげで – thousight

+0

あなたは歓迎です。 –

関連する問題