Javascript 401-未经授权的访问:Auth0和azure
我已将数据库连接到auth0,尝试连接时会返回401未经授权的访问。我已允许身份验证进入防火墙,密码正确。为什么在搜索用户名和密码时会返回此错误 更多信息 在我的easy表中,我只对它们进行了身份验证访问,我需要做些什么来解决这个问题吗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
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;
有关更多信息,请参阅