Use username also to log in (#250)
* Use username also to log in * Minor changes
This commit is contained in:
parent
c6ecda4f3a
commit
dee9688ece
3 changed files with 18 additions and 5 deletions
|
@ -6,10 +6,10 @@ function LoginForm(props) {
|
||||||
return (
|
return (
|
||||||
<form className="form" onSubmit={handleSubmit(props.validateAndLoginUser.bind(this, props.previousPath))}>
|
<form className="form" onSubmit={handleSubmit(props.validateAndLoginUser.bind(this, props.previousPath))}>
|
||||||
<p className="form__field">
|
<p className="form__field">
|
||||||
<label htmlFor="email" className="form__label">Email</label>
|
<label htmlFor="email" className="form__label">Email or Username</label>
|
||||||
<input
|
<input
|
||||||
className="form__input"
|
className="form__input"
|
||||||
aria-label="email"
|
aria-label="email or username"
|
||||||
type="text"
|
type="text"
|
||||||
id="email"
|
id="email"
|
||||||
{...domOnlyProps(email)}
|
{...domOnlyProps(email)}
|
||||||
|
|
|
@ -15,10 +15,11 @@ passport.deserializeUser((id, done) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sign in using Email and Password.
|
* Sign in using Email/Username and Password.
|
||||||
*/
|
*/
|
||||||
passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
|
passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, done) => {
|
||||||
User.findOne({ email: email.toLowerCase() }, (err, user) => { // eslint-disable-line consistent-return
|
User.findByMailOrName(email.toLowerCase())
|
||||||
|
.then((user) => { // eslint-disable-line consistent-return
|
||||||
if (!user) {
|
if (!user) {
|
||||||
return done(null, false, { msg: `Email ${email} not found.` });
|
return done(null, false, { msg: `Email ${email} not found.` });
|
||||||
}
|
}
|
||||||
|
@ -28,7 +29,8 @@ passport.use(new LocalStrategy({ usernameField: 'email' }, (email, password, don
|
||||||
}
|
}
|
||||||
return done(null, false, { msg: 'Invalid email or password.' });
|
return done(null, false, { msg: 'Invalid email or password.' });
|
||||||
});
|
});
|
||||||
});
|
})
|
||||||
|
.catch((err) => done(null, false, { msg: err }));
|
||||||
}));
|
}));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -58,4 +58,15 @@ userSchema.methods.comparePassword = function comparePassword(candidatePassword,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
userSchema.statics.findByMailOrName = function findByMailOrName(email) {
|
||||||
|
const query = {
|
||||||
|
$or: [{
|
||||||
|
email,
|
||||||
|
}, {
|
||||||
|
username: email,
|
||||||
|
}],
|
||||||
|
};
|
||||||
|
return this.findOne(query).exec();
|
||||||
|
};
|
||||||
|
|
||||||
export default mongoose.model('User', userSchema);
|
export default mongoose.model('User', userSchema);
|
||||||
|
|
Loading…
Reference in a new issue