RESTful API 访问令牌机制
RESTful API access token mechanism
我正在使用 Express、Body-parser 和 MySQL 为业务经理系统开发 JavaScript/MySQL RESTful API。目前,我正在研究访问令牌。在任何 API 调用之前,正文必须包含一个 API 密钥,该密钥由 API 验证。在每个 API 调用函数中,我首先检查访问令牌是否存在,如果存在,API 执行 MySQL 命令并发回结果。
重要的是我想创建一个函数来检查访问令牌是否存在以及 return 是真还是假。但是,我不知道如何从 conn.query()
方法中 return 这个布尔值。任何帮助将不胜感激,我很绝望。
这是我的代码:
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()
方法 return 未定义...
你的 checkApiKey
函数 returns 未定义,因为你的逻辑 returns 在 sql 的回调函数中是对还是错。
我推荐另一种方法,使用 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)
})
})
我正在使用 Express、Body-parser 和 MySQL 为业务经理系统开发 JavaScript/MySQL RESTful API。目前,我正在研究访问令牌。在任何 API 调用之前,正文必须包含一个 API 密钥,该密钥由 API 验证。在每个 API 调用函数中,我首先检查访问令牌是否存在,如果存在,API 执行 MySQL 命令并发回结果。
重要的是我想创建一个函数来检查访问令牌是否存在以及 return 是真还是假。但是,我不知道如何从 conn.query()
方法中 return 这个布尔值。任何帮助将不胜感激,我很绝望。
这是我的代码:
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()
方法 return 未定义...
你的 checkApiKey
函数 returns 未定义,因为你的逻辑 returns 在 sql 的回调函数中是对还是错。
我推荐另一种方法,使用 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)
})
})