2017-07-17 111 views
0

我已將我的數據庫連接到auth0,並且當我嘗試連接時返回401是未經授權的訪問。我已經允許auth進入我的防火牆,密碼是正確的。如何在搜索用戶名和密碼時返回此錯誤?401 - 未經授權的訪問:Auth0和azure

在我簡單的表格更多信息

我讓他們只有經過身份驗證的訪問,我必須做些什麼來解決這個問題?

function login(email, password, callback) { 
     //this example uses the "tedious" library 
     //more info here: http://pekim.github.io/tedious/index.html 
     var Connection = require('[email protected]').Connection; 
     var Request = require('[email protected]').Request; 
     var TYPES = require('[email protected]').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); 
     }); 
    } 

回答

0

由於您正在使用Azure移動應用程序,其中包括您的應用程序的the Node.js server SDK。然後,您無需安裝tedious即可使用Azure SQL數據庫。 SDK已經包裝了mssql來做到這一點。所以基本上你可以使用this code sample來連接你的數據庫。

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; 

欲瞭解更多信息,請參閱this documentation