簡體   English   中英

RESTful API 訪問令牌機制

[英]RESTful API access token mechanism

我正在為使用 Express、Body-parser 和 MySQL 的業務管理器系統開發 JavaScript/MySQL RESTful API。 目前,我正在研究訪問令牌。 在任何 API 調用之前,主體必須包含 API 正在驗證的 API 密鑰。 在每個 API 調用函數中,我首先檢查訪問令牌是否存在,如果存在,API 將執行 MySQL 命令並返回結果。 重要的是我想創建一個函數來檢查訪問令牌是否存在並返回 true 或 false。 但是,我不知道如何從conn.query()方法返回這個布爾值。 任何幫助將不勝感激,我很絕望。 這是我的代碼:

function checkApiKey(apiKey) {
  let sql = "SELECT * FROM apikeys WHERE apikey = '" + apiKey + "'";
  conn.query(sql, (err, results) => {
    if (err) throw err;

    if (results.length > 0) return true;

    return false;
  });
}

app.get("/api/users",(req, res) => {
  if (checkApiKey(req.body.apiKey)) {
    let sql = "SELECT * FROM users";
    let query = conn.query(sql, (err, results) => {
      if (err) throw err;
      res.send(results);
    });
  }
});

但是, checkApiKey()方法返回 undefined ...

您的checkApiKey函數返回未定義,因為您的邏輯在 sql 的回調函數中返回 true 或 false。

我推薦另一種方法,使用checkApiKey作為中間件功能:

const checkApiKey = (req, res, next) => {
  conn.query("SELECT * FROM apikeys WHERE apikey = ?", [req.body.apiKey], (err, result) => {
    if (err) throw err
    if (results)
      next() // continue to next router function
    else
      res.status(403).end('Unauthorized') // resolve with 403
  })
}

app.get("/api/users",
        checkApiKey, // middleware auth function
        (req, res) => {
  conn.query("SELECT * FROM users", (err, results) => {
    if (err) throw err;
    res.send(results)
  })
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM