Migrating login/registration from username to email
This commit is contained in:
parent
85e9c159da
commit
7df7f1053b
@ -5,16 +5,16 @@ const hash = Symbol();
|
||||
const sha256 = text => crypto.createHash('sha256').update(text).digest('base64');
|
||||
|
||||
class User {
|
||||
constructor(login = '', password = '') {
|
||||
constructor(email = '', password = '') {
|
||||
this._id = uuid();
|
||||
this.login = login;
|
||||
this.email = email;
|
||||
this[hash] = sha256(password);
|
||||
}
|
||||
|
||||
static fromDB(dbUser) {
|
||||
let user = new User();
|
||||
user._id = dbUser._id;
|
||||
user.login = dbUser.login;
|
||||
user.email = dbUser.email;
|
||||
user[hash] = dbUser.hash;
|
||||
|
||||
return user;
|
||||
@ -23,7 +23,7 @@ class User {
|
||||
toDB() {
|
||||
let user = new User();
|
||||
user._id = this._id;
|
||||
user.login = this.login;
|
||||
user.email = this.email;
|
||||
user.hash = this[hash];
|
||||
return user;
|
||||
}
|
||||
|
||||
@ -6,15 +6,15 @@ const User = require('../models/user');
|
||||
const makeError = error => ({ success: false, error });
|
||||
|
||||
router.post('/signup', async (req, res) => {
|
||||
const { login, password } = req.body;
|
||||
if(login && password) {
|
||||
const { email, password } = req.body;
|
||||
if(email && password) {
|
||||
try {
|
||||
let collection = req.db.collection('users');
|
||||
let users = await collection.find({ login }).toArray();
|
||||
let users = await collection.find({ email }).toArray();
|
||||
if(users.length == 0) {
|
||||
let user = new User(login, password);
|
||||
let user = new User(email, password);
|
||||
await collection.insertOne(user.toDB());
|
||||
user.token = jwt.sign({ login }, '#IWantToBelieve', { expiresIn: '365d' });
|
||||
user.token = jwt.sign({ email }, '#IWantToBelieve', { expiresIn: '365d' });
|
||||
res.send({ success: true, data: user });
|
||||
} else {
|
||||
res.send(makeError('User already exists'));
|
||||
@ -29,19 +29,19 @@ router.post('/signup', async (req, res) => {
|
||||
});
|
||||
|
||||
router.post('/login', async (req, res) => {
|
||||
const { login, password } = req.body;
|
||||
if(login && password) {
|
||||
const { email, password } = req.body;
|
||||
if(email && password) {
|
||||
try {
|
||||
let users = req.db.collection('users');
|
||||
let me = await users.findOne({ login });
|
||||
let me = await users.findOne({ email });
|
||||
if(me) {
|
||||
me = User.fromDB(me);
|
||||
if(!me.checkPassword(password)) {
|
||||
res.send(makeError('Incorrect login or password'));
|
||||
res.send(makeError('Incorrect email or password'));
|
||||
return;
|
||||
}
|
||||
|
||||
me.token = jwt.sign({ login }, '#IWantToBelieve', { expiresIn: '365d' });
|
||||
me.token = jwt.sign({ email }, '#IWantToBelieve', { expiresIn: '365d' });
|
||||
res.send({ success: true, data: me });
|
||||
} else {
|
||||
res.send(makeError('Incorrect login or password'));
|
||||
@ -55,9 +55,39 @@ router.post('/login', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
router.post('/signIn', async (req, res) => {
|
||||
const { email, password } = req.body;
|
||||
if(email && password) {
|
||||
try {
|
||||
let users = req.db.collection('users');
|
||||
let me = await users.findOne({ email });
|
||||
if(me) {
|
||||
me = User.fromDB(me);
|
||||
if(!me.checkPassword(password)) {
|
||||
res.send(makeError('Incorrect email or password'));
|
||||
return;
|
||||
}
|
||||
|
||||
me.token = jwt.sign({ email }, '#IWantToBelieve', { expiresIn: '365d' });
|
||||
res.send({ success: true, data: me });
|
||||
} else {
|
||||
let user = new User(email, password);
|
||||
await users.insertOne(user.toDB());
|
||||
user.token = jwt.sign({ email }, '#IWantToBelieve', { expiresIn: '365d' });
|
||||
res.send({ success: true, data: user });
|
||||
}
|
||||
} catch(ex) {
|
||||
res.send(makeError('Error logging in'));
|
||||
console.error(ex);
|
||||
}
|
||||
} else {
|
||||
res.send(makeError('Invalid parameters'));
|
||||
}
|
||||
});
|
||||
|
||||
router.get('/', async (req, res) => {
|
||||
const { login } = req.query;
|
||||
let users = await req.db.collection('users').find({ login }).toArray();
|
||||
const { email } = req.query;
|
||||
let users = await req.db.collection('users').find({ email }).toArray();
|
||||
if(users.length > 0) {
|
||||
res.send({ success: true, data: User.fromDB(users[0]) });
|
||||
} else {
|
||||
@ -66,8 +96,8 @@ router.get('/', async (req, res) => {
|
||||
});
|
||||
|
||||
router.get('/find', async (req, res) => {
|
||||
const { login } = req.query;
|
||||
let users = await req.db.collection('users').find({ login: { $regex: new RegExp(`.*${login}.*`, 'i') } }).toArray();
|
||||
const { email } = req.query;
|
||||
let users = await req.db.collection('users').find({ login: { $regex: new RegExp(`.*${email}.*`, 'i') } }).toArray();
|
||||
users = users.map(user => {
|
||||
user.contacts = [];
|
||||
return User.fromDB(user);
|
||||
|
||||
@ -28,7 +28,7 @@ router.post('/check', async (req, res) => {
|
||||
const number = req.body.number.replace(/ /g, '').toUpperCase();
|
||||
const googleIdToken = req.body.googleIdToken;
|
||||
const forceUpdate = req.body.forceUpdate.toLowerCase() == 'true';
|
||||
const { login } = req.user;
|
||||
const { email } = req.user;
|
||||
|
||||
console.log(`=== checking number: ${number} ====================================`);
|
||||
|
||||
@ -50,7 +50,7 @@ router.post('/check', async (req, res) => {
|
||||
if(autocod.status == 'fulfilled') {
|
||||
let vehicle = autocod.value;
|
||||
console.log('autocod found vehicle: ', vehicle?.brand?.name?.original);
|
||||
vehicle.addedBy = login;
|
||||
vehicle.addedBy = email;
|
||||
if(vin01?.status == 'fulfilled') {
|
||||
vehicle.vin1 = vin01.value.vin1;
|
||||
if(vin01.value?.brand?.name?.original == vehicle?.brand?.name?.original) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user