javascript - 从 Node API 端点解析表达式( bool 值)

标签 javascript sql-server node.js session credentials

我正在尝试验证 API key 以运行 API 端点函数。

服务器.js

let db = require("./sql/rest_functions")            // Custom modules
let session = require("./sql/session_management")

app.get("/node/api/mssql/test", function(req, res) {
   if(session.validateKey(req)) {
     db.mssqlQuery(req, res)
   }
 })

session .js

exports.validateKey = function(req) {
  return sql.connect(config.properties)
    .then(pool => {
      return pool.request()
        .query("SELECT CASE WHEN EXISTS (SELECT * FROM Login WHERE (username = '" + req.header("username") + "' AND apiKey = '" + req.header("apiKey") + "')) THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END")
        .then(response => {
          console.log(typeof response[0]['']) // returns boolean
          return response[0]['']              // return nested value to get true / false response
        })
    })
}

validateKey 函数返回 true 和 false(我认为是纯文本),我希望它解析为可以传递到 API 测试函数的 bool 值。

我已经尝试过这种 JSON.parse 方法和 session.validateKey(req) == 'true' 设计模式,但两种情况都无法解决预期的行为。

如何解析返回值以验证用户的凭据?

最佳答案

我建议只返回数据库中的行数并验证是否存在 1 条目(或多个条目,具体取决于您的数据结构)。

请注意,要减轻 SQL 注入(inject),您必须使用参数绑定(bind),如下所示;该库不会“自动”防止注入(inject),as per the documentation如果您不使用参数绑定(bind)。将 VarChar(100) 更改为这些字段的任何列类型。

exports.validateKey = async function(req) {
  return await sql.connect(config.properties)
    .then(pool => pool.request()
        .input('user', sql.VarChar(100), req.header("username"))
        .input('key', sql.VarChar(100), req.header("apiKey"))
        .query('SELECT COUNT(*) AS valid FROM Login WHERE username = @user AND apiKey = @key')
        .then(response => result.recordset[0].valid === 1)
    )
}

请注意,validateKey 将返回一个 bool 值 Promise,因此我们添加了 async/await保存修改路由 Controller 。

请注意,我已经从大多数粗箭头函数中删除了大括号:它们都是一个语句,所以它们是 redundant .

警告:我实际上不能尝试这个,这是阅读文档后的有根据的猜测。希望对您有所帮助。

关于javascript - 从 Node API 端点解析表达式( bool 值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48099233/

相关文章:

javascript - Node Js findByIdAndUpdate 函数未在数据库中更新

javascript - 组件名称需要以大写字母开头?

javascript - 循环遍历表以生成 json

javascript - 将 TinyMCE WYSIWYG HTML 编辑器集成到 React Native 应用程序

ruby-on-rails - 在 Ruby on rails 中连接 Sql 服务器

sql - 从多列中获取最后日期

javascript - 如何在 RequireJS 项目中集成 ES6 Module 语法

javascript - 多折线图显示问题

java - 具有 Where 约束的 SecondaryTable

css - sass 文件不是由 gulp 编译的