Javascript 401-未经授权的访问:Auth0和azure

Javascript 401-未经授权的访问:Auth0和azure,javascript,azure,authentication,auth0,azure-sql-database,Javascript,Azure,Authentication,Auth0,Azure Sql Database,我已将数据库连接到auth0,尝试连接时会返回401未经授权的访问。我已允许身份验证进入防火墙,密码正确。为什么在搜索用户名和密码时会返回此错误 更多信息 在我的easy表中,我只对它们进行了身份验证访问,我需要做些什么来解决这个问题吗 function login(email, password, callback) { //this example uses the "tedious" library //more info here: http://pekim.gi

我已将数据库连接到auth0,尝试连接时会返回401未经授权的访问。我已允许身份验证进入防火墙,密码正确。为什么在搜索用户名和密码时会返回此错误

更多信息

在我的easy表中,我只对它们进行了身份验证访问,我需要做些什么来解决这个问题吗

function login(email, password, callback) {
      //this example uses the "tedious" library
      //more info here: http://pekim.github.io/tedious/index.html
      var Connection = require('tedious@1.11.0').Connection;
      var Request = require('tedious@1.11.0').Request;
      var TYPES = require('tedious@1.11.0').TYPES;

      var connection = new Connection({
        userName: 'username',
        password: 'pass',
        server: 'server',
        options: {
          database: 'db',
          encrypt: true,
          rowCollectionOnRequestCompletion: true
        }
      });

      var query = "SELECT Id, Email, Password " +
        "FROM user WHERE Email = @Email";

      connection.on('debug', function (text) {
        // Uncomment next line in order to enable debugging messages
        // console.log(text);
      }).on('errorMessage', function (text) {
        console.log(JSON.stringify(text, null, 2));
        return callback(text);
      }).on('infoMessage', function (text) {
        // Uncomment next line in order to enable information messages
        // console.log(JSON.stringify(text, null, 2));
      });

      connection.on('connect', function (err) {
        if (err) { return callback(err); }

        var request = new Request(query, function (err, rowCount, rows) {
          if (err) {
            callback(new Error(err));
          } else if (rowCount < 1) {
            callback(new WrongUsernameOrPasswordError(email));
          } else {
            bcrypt.compare(password, rows[0][2].value, function (err, isValid) {
              if (err) { callback(new Error(err)); }
              else if (!isValid) { callback(new WrongUsernameOrPasswordError(email)); }
              else {
                callback(null, {
                  user_id: rows[0][0].value,
                  email: rows[0][1].value
                });
              }
            });
          }
        });

        request.addParameter('Email', TYPES.VarChar, email);
        connection.execSql(request);
      });
    }
函数登录(电子邮件、密码、回调){
//此示例使用“乏味”库
//更多信息请点击此处:http://pekim.github.io/tedious/index.html
var Connection=require('tedious@1.11.0)。连接;
var请求=需要('tedious@1.11.0)。请求;
变量类型=需要('tedious@1.11.0)。类型;
var连接=新连接({
用户名:“用户名”,
密码:“pass”,
服务器:'服务器',
选项:{
数据库:“db”,
加密:对,
rowCollectionOnRequestCompletion:true
}
});
var query=“选择Id、电子邮件、密码”+
“来自用户,其中Email=@Email”;
connection.on('debug',函数(文本){
//取消注释下一行以启用调试消息
//console.log(文本);
}).on('errorMessage',函数(文本){
log(JSON.stringify(text,null,2));
返回回调(文本);
}).on('infoMessage',函数(文本){
//取消注释下一行以启用信息消息
//log(JSON.stringify(text,null,2));
});
connection.on('connect',函数(err){
if(err){返回回调(err);}
var请求=新请求(查询、函数(错误、行数、行数){
如果(错误){
回调(新错误(err));
}else if(行计数<1){
回调(新的错误用户名或密码错误(电子邮件));
}否则{
bcrypt.compare(密码,行[0][2]。值,函数(err,isValid){
if(err){回调(新错误(err));}
如果(!isValid){callback(新的错误用户名或密码错误(电子邮件));}
否则{
回调(null{
用户标识:行[0][0]。值,
电子邮件:行[0][1]。值
});
}
});
}
});
request.addParameter('Email',TYPES.VarChar,Email);
connection.execSql(请求);
});
}

因为您使用的是Azure移动应用程序,它包含在您的应用程序中。这样,您就不需要安装乏味的
来使用Azure SQL数据库。SDK已经完成了这项工作。因此,基本上可以使用连接数据库

var api = {
    // an example of executing a SQL statement directly
    get: (request, response, next) => {
        var query = {
            sql: 'UPDATE TodoItem SET complete = @completed',
            parameters: [
                { name: 'completed', value: request.query.completed }
            ]
        };

        request.azureMobile.data.execute(query)
            .then(function (results) {
                response.json(results);
            });
    },
    // an example of executing a stored procedure
    post: (request, response, next) => {
        var query = {
            sql: 'EXEC completeAllStoredProcedure @completed',
            parameters: [
                { name: 'completed', value: request.query.completed }
            ]
        };

        request.azureMobile.data.execute(query)
            .then(function (results) {
                response.json(results);
            });
    }
};

module.exports = api;
有关更多信息,请参阅