1

私のサーバーには、登録後にトークンを提供する登録 API と、ユーザーのトークンを認証するミドルウェアがあります。サーバーで何か他のことをするためのトークンを取得するには、アカウントを登録する必要があります。しかし、まだトークンを持っていないため、ミドルウェアがネットワーク リクエストをブロックします。

この場合、どうすれば自分のアカウントとトークンを作成できますか? いくつかのトリックでミドルウェアを通過しますか?

ミドルウェア:

  // 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
          })
        }
      }
    })
  })
4

1 に答える 1

3

認証されたルートを呼び出す必要があるときはいつでも最初にトークンをチェックしてからルートを公開するように、トークンをチェックしてルートを公開する関数を作成します。

サンプルコード

これが私のチェックトークン関数だとしましょう

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.post('/protectedroute', checkToken, routename.functionname);
app.post('/notprotected', routename.functionname);

異なるコードに対して別々のルートを持ちたい場合、またはメインファイルの関数などに保持することで特定のコードブロックを呼び出すことができます。つまりapp.jsserver.js選択したものは何でも。

ここで実際に行っていることは、コード ブロックまたは関数のチャネルを介してルートを公開する独自のミドルウェアを作成していることです。

于 2016-06-21T23:34:19.640 に答える