'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}
/>
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 |
