'node.js login not working with azure sql database

So I have an azure sql database and I got the register to work and add fields to the sql database just fine using node.js and react as my front end. I'm trying to get my login to work and I set it up the same and same on the frontend just like my register, but it keeps returning wrong username or password when it is correct. Could anyone help and tell me what I'm doing wrong?

const express = require("express");
const cors = require("cors");
const app = express();

app.use(express.json({
    type: ['application/json', 'text/plain']
  }));
app.use(cors());

const { Connection, Request, TYPES } = require("tedious");

// Create connection to database
const config = {
  authentication: {
    options: {
      userName: "username", // update me
      password: "password" // update me
    },
    type: "default"
  },
  server: "server.database.windows.net", // update me
  options: {
    database: "server", //update me
    encrypt: true
  }
};

const connection = new Connection(config);

// Attempt to connect and execute queries if connection goes through
connection.on("connect", err => {
  if (err) {
    console.error(err.message);
  } else {
    console.log("Server Running and Connected")
  }
});

app.post("/register", (req, res)=> {
    var sql = "INSERT dbo.userinfo(first_name, last_name, user_name, password, email) VALUES (@firstname, @lastname, @username, @password, @email)"
    // Read all rows from table
    const request = new Request(sql,
      (err, result) => {
        if (err) {
          console.error(err.message);
        } else {
          console.log('worked');
        }
      }
    );
    request.addParameter('firstname', TYPES.NVarChar, req.body.firstname)
    request.addParameter('lastname', TYPES.NVarChar, req.body.lastname)
    request.addParameter('username', TYPES.NVarChar, req.body.username)
    request.addParameter('password', TYPES.NVarChar,req.body.password)
    request.addParameter('email', TYPES.NVarChar, req.body.email)

    connection.execSql(request);
})

app.post('/login', (req, res)=>{
var sql = "SELECT * FROM dbo.userinfo WHERE user_name = @username AND password = @password"
  const request = new Request(sql,
    (err, result) => {
      if (err) {
        res.send({err: err})
      }
      if(result > 0){
        res.send(result)
        console.log("passed")
      }
      else{
        res.send({message: "Wrong username/password combination"})
      }
    }
  );
  request.addParameter('username', TYPES.NVarChar, req.body.usernamelog)
  request.addParameter('password', TYPES.NVarChar,req.body.passwordlog)

  connection.execSql(request);
})


connection.connect();

app.listen(1433, () => {
    console.log("running server");
});

FrontEnd

import React, {useState} from 'react';
import Axios from 'axios'
import { StyleSheet, Text, View, SafeAreaView, Modal, Button, TextInput } from 'react-native';

const App = () => {
  const [modalVisible, setModalVisible] = useState(false);
  const [modalVisible2, setModalVisible2] = useState(false);
  const [firstnamereg, setfirstname] = useState('')
  const [lastnamereg, setlastname] = useState('')
  const [emailreg, setemail] = useState('')
  const [usernamereg, setusername] = useState('')
  const [passwordreg, setpassword] = useState('')

  const [usernamelog, setusernamelog] = useState('')
  const [passwordlog, setpasswordlog] = useState('')

  const register = () => {
    Axios.post('http://localhost:1433/register', {
      firstname: firstnamereg,
      lastname: lastnamereg,
      username: usernamereg,
      password: passwordreg,
      email: emailreg,
  }).then((response) => {
    console.log(response);
  });
  };

  const login = () => {
    Axios.post('http://localhost:1433/login', {
      username: usernamelog,
      password: passwordlog,
  }).then((response) => {
    console.log(response);
  });
  };
<View>
            <Text style={[styles.title]}>
              Login to Account
            </Text>
            <TextInput
             style={styles.input}
             placeholder="Username"
             keyboardType="string"
             onChangeText={setusernamelog}
            />
            <TextInput
             style={styles.input}
             placeholder="Password"
             keyboardType="string"
             onChangeText={setpasswordlog}
            />
            <Button 
              title='Login'
              onPress={login}
            />

enter image description here



Solution 1:[1]

I think you can simply check with the result parameter, instead of result.length

Example

app.post('/login', (req, res)=>{
var sql = "SELECT * FROM dbo.userinfo WHERE user_name = @username AND password = @password"
  const request = new Request(sql,
    (err, result) => {
      if (err) {
        res.send({err: err})
      }
       if(result > 0){
         res.send(result)
         console.log("passed")
       }
       else{
         res.send({message: "Wrong username/password combination"})
       }
      }
  );
  request.addParameter('username', TYPES.NVarChar, req.body.username)
  request.addParameter('password', TYPES.NVarChar,req.body.password)

  connection.execSql(request);
})

Edit: Since in your frontend, you are passing the values as username and password in your post request. So in your backend, you must access it through req.body.username and req.body.password.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1