Невозможно аутентифицировать учетные данные пользователя на SQL сервере с использованием NodeJS - PullRequest
0 голосов
/ 30 января 2020

Я пытаюсь создать форму входа, используя NodeJS, Express и SQL Сервер. Я сталкиваюсь с проблемами с процессом аутентификации. Ниже приведена форма.

Форма:

<form action="/auth" method="POST">
                <input type="text" name="uname" placeholder="Username" required="">
                <input type="password" name="pass" placeholder="Password" required="">
                <input type="submit">
            </form>

Я уверен, что соединение с базой данных работает, поскольку я пытался просто извлечь информацию из базы данных и успешно.

app. js file:

var sql = require("mssql");
var express = require("express");
var session = require("express-session");
var bodyParser = require("body-parser");
var path = require("path");


var dbconfig = {
  server: "Server",
  database: "Test",
  user: "########",
  password: "####################",
  port: 1433,
  options : {
    encrypt: false
  }
};

var app = express();
app.use(session({
  secret: 'Secret',
  resave: true,
  saveUninitalized: true

}));

app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(bodyParser.json());

app.get('/', function(request, response) {
  response.sendFile(path.join(__dirname + '/login.html'));
});

app.post('/auth', function(request, response) {
try {
    var uname = request.body.uname;
    var pass = request.body.pass;
    console.log(uname);
    console.log(pass);
    if (uname && pass) {

      var conn = new sql.ConnectionPool(dbconfig);
      conn.connect((function() {
        var thisConn = conn;
        var req = new sql.Request(thisConn);

        return function() { //connect callback
          req.query("Select * from Admin where username = ? AND password = ?", [uname, pass],
            (function() {
              var req = request;
              var resp = response;
              var conn = thisConn;

              return function(error, results, recordset) { // query callback
                if (results.length > 0) {
                  req.session.loggedin = true;
                  req.session.username = uname;
                  resp.redirect('/home');
                } else {
                  response.send('Username and/or Password not found');
                }
                conn.close();
                resp.end();
              };
            })());
        };
      })());
    } else {
      response.send('Please enter Username and Password');
    }
  } catch (err) {
    console.error('SQL error', err);
  }

});

Я получаю сообщение об ошибке синтаксиса. Я думал, что request.body была проблема, пока я console.log (uname) не доказал, что переменные содержат желаемое имя пользователя и пароль.

Ошибка:

test
test
(node:24386) UnhandledPromiseRejectionWarning: RequestError: Incorrect syntax near '?'.
    at handleError (///nodeconSQL/node_modules/mssql/lib/tedious/request.js:366:15)
    at Connection.emit (events.js:193:13)
    at Parser.tokenStreamParser.on.token (///nodeconSQL/node_modules/tedious/lib/connection.js:832:12)
    at Parser.emit (events.js:193:13)
    at Parser.parser.on.token (///nodeconSQL/node_modules/tedious/lib/token/token-stream-parser.js:37:14)
    at Parser.emit (events.js:193:13)
    at addChunk (///nodeconSQL/node_modules/readable-stream/lib/_stream_readable.js:298:12)
    at readableAddChunk (///nodeconSQL/node_modules/readable-stream/lib/_stream_readable.js:280:11)
    at Parser.Readable.push (///nodeconSQL/node_modules/readable-stream/lib/_stream_readable.js:241:10)
    at Parser.Transform.push (///nodeconSQL/node_modules/readable-stream/lib/_stream_transform.js:139:32)
(node:24386) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)

1 Ответ

0 голосов
/ 30 января 2020

Вы получаете сообщение об ошибке, потому что query не принимает 3 параметра.

Если вы хотите использовать parameters, следуйте этому

req
.input('uname',sql.VarChar(50),uname)
.input('pass',sql.VarChar(50),pass)
.query("Select * from Admin where username = @uname AND password = @pass", (function () {} ) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...