I am using passport-local to authenticate users. However, I am using email and password to login instead of the default username.
How do I change my configuration to change username to email in passport.authenticate?
Here is my LocalStrategy code:
const strategy = new LocalStrategy(userSchema.authenticate() )
passport.use(strategy);
Here is my signup code:
app.post('/signup', async function (req, res) {
const email = req.body.email;
const password = req.body.password;
const passwordretype = req.body.passwordretype
const name = req.body.name
if (password.length < 5) {
return res.render('signup', { error: "Your Password must be at least 5 characters in length" })
}
if (password !== passwordretype) {
return res.render('signup', { error: "Your Passwords must match" })
}
if (password.length > 40) {
return res.render('signup', { error: "Your Password must be under 40 characters in length" })
}
if (name.length > 50) {
return res.render('signup', { error: "Your Name must be under 50 characters in length" })
}
const doc = await userSchema.findOne({ email: email })
if (doc) {
return res.render('signup', { error: "This email is already in use with the sign up method: " + doc.method })
}
const randomnum = String(Math.floor(Math.random() * 10000))
const username1 = name.split(' ').join('')
const username = username1.concat(randomnum)
userSchema.register(
new userSchema({
email: email,
method: 'email',
credits: 0,
totalearned: 0,
totalspent: 0,
purchases: [],
currentlysolving: null,
solved: [],
posted: [],
currentposted: [],
level: 0,
username: username,
feescollected:0,
}), req.body.password, function (err, user) {
if (err) {
return res.render('signup', { error: err })
} else {
req.login(user, (er) => {
if (er) {
return res.render('signup', { error: err })
}
else {
res.redirect('/')
}
});
}
}
)
});
And finally, here is the login code that is not allowing email
app.post('/login', function (req, res) {
//
const state = req.query.state
const email = req.body.email;
const password = req.body.password;
//
passport.authenticate("local", function (err, user, info) {
if (err) {
return res.render('login', { error: err, state: state }) }
else {
if (!user) {
return res.render('login', { error: `The email or password entered is incorrect`, state: state })
}
else {
const token = jwt.sign({ userId: user._id, email: user.email }, secretkey, { expiresIn: "24h" });
res.json({ success: true, message: "Authentication successful", token: token });
}
}
})(req, res);
})
How do I fix this? Thank you
Via Active questions tagged javascript - Stack Overflow https://ift.tt/JfaeVyQ
Comments
Post a Comment