on my website I have a login form where the user inputs their information and when they submit a post request is made where their info is checked, and if it is valid I redirect them back to the login form where they then enter the code that was sent to their email. My question is when the post request is made the second time how would I use the same url but not have to go through the validating again.
Auth.js
//Login Route
router.post('/login', async(req, res) => {
//Validate Data
const { error } = loginValidation(req.body);
if (error) {
let msg = error.message;
return res.cookie('loginError', msg, [{ httpOnly: true }]).redirect('/login');;
}
//Check if user exists
const user = await User.findOne({ email: req.body.email });
if (!user) {
let msg = 'Email or password is invalid!'
return res.cookie('loginError', msg, [{ httpOnly: true }]).redirect('/login');;
}
//Check if password is correct
const validPass = await bcrypt.compare(req.body.password, user.password);
if (!validPass) {
let msg = 'Email or password is invalid!'
return res.cookie('loginError', msg, [{ httpOnly: true }]).redirect('/login');;
}
const verificationCode = Math.floor(100000 Math.random() * 900000);
email.loginCode(req.body.email, verificationCode);
return res.cookie('formComplete', 'true', [{ httpOnly: true }]).redirect('/login');
//Create and assign a jwt
const token = jwt.sign({ _id: user._id }, process.env.TOKEN_SECRET);
res.header('auth-token', token).redirect('/dashboard');
});
Sorry if this is a dumb question, i'm new to express.js, if you need any more info let me know.
CodePudding user response:
Actually, it's not really related to express.
You are asking about "state" in the server.
If you was to "refactor" your question, it could become "I have this user that's signed in, how to verify him before he visit any routes"
The solution can be several
- Add a global state. Let say
isVerified
= false, after verification for the first time, you set it to true - As you see in my "refactor" question above,
session
is something you use to check user logged in or shopping cart...
I suggest you dig into both solutions above, for example for the first one, where to declare that global state? What if we need to check multiple users?