2016-10-28 5 views
0

мне удалось получить мой пользователь обновляет свой профиль, но я пошел в проблему: когда мой пользователь хочет изменить свое имя, я сталкиваются с двумя проблемами:Проверьте, не указаны ли в базе данных имя пользователя?

  1. Если мой пользователь хочет изменить к существующему имени пользователя в базе данных он будет обновляться по существующему имени пользователю (не пользователь Расчетный)
  2. Когда запрашиваемое имя пользователь не Existe в базе данных, она не будет обновления, потому что нет никакого существующего имени пользователя

Вот мой код, чтобы получить все других полей, но только имя пользователя ...

exports.update = function(req,res){ 

    req.checkBody('username', 'Email is required').notEmpty().isEmail(); 
    req.checkBody('password', 'Password is required').notEmpty(); 
    req.checkBody('name', 'Name is required').notEmpty(); 
    req.checkBody('surname', 'Surname is required').notEmpty(); 
    req.checkBody('codePostal', 'Code postal is required').notEmpty(); 
    req.checkBody('phoneNumber', 'Téléphone is required').notEmpty(); 
    req.checkBody('address', 'Address is required').notEmpty(); 
    req.checkBody('town', 'Town is required').notEmpty(); 

    var errors = req.validationErrors(); 
    console.log(errors); 
    if (errors) { 
    res.status(400).send(errors); 
    return; 
    } 

    var salt = bcrypt.genSaltSync(10), 
    hash = bcrypt.hashSync(req.body.password, salt); 

    User.findOne({ username: req.body.username }, function(err, user) { 
     if (err) { 
     return res.status(400).send('Error updating account.'); 
     } 

     user.username = req.body.username; 
     user.password = hash; 
     user.name = req.body.name; 
     user.surname = req.body.surname; 
     user.codePostal = req.body.codePostal; 
     user.phoneNumber = req.body.phoneNumber; 
     user.address = req.body.address; 
     user.town = req.body.town 

     user.save(function(err) { 
     if (err) { 
      console.log(err); 
      res.status(500).send('Error updating account.'); 
      return; 
     } 
     res.status(200).send('Account updated.'); 
     }); 
    }); 
} 

Вслед за

userRoute = require('./server/api/user/index'); 
app.post('/account/update', authorizeRequest, userRoute.update); 

function authorizeRequest(req, res, next) { 
    if (req.isAuthenticated()) { 
    next(); 
    } else { 
    res.status(401).send('Unauthorized. Please login.'); 
    } 
} 

Я уже пытался вложенные запросы, но это просто не работает ...: -/

ответ

0

Что ваша база данных пользователей уникальный ключ? Например, если у вас есть адрес электронной почты, он может быть уникальным, и таким образом у вас не будет таких проблем.

Вам нужно еще раз переосмыслить логику и решить, какое поле будет вашим уникальным полем, и переписывайте все в соответствии с этим.

+0

Мое имя пользователя поле уже уникален, вы не можете создать учетную запись с тем же именем уже! – antoine2vey

0

Независимо от того, какой у вас клиент (Android, iOS, Angular), держите скрытое поле, содержащее существующий username пользователя, и другой, который имеет то же значение, но которое он может редактировать. Назовите их по-разному.

На заднем плане найдите оригинал и обновите его новым.

req.checkBody('username', 'Email is required').notEmpty().isEmail(); // original/current 
    req.checkBody('newUsername', 'Email is required').notEmpty().isEmail(); //new 
    req.checkBody('password', 'Password is required').notEmpty(); 
    req.checkBody('name', 'Name is required').notEmpty(); 
    req.checkBody('surname', 'Surname is required').notEmpty(); 
    req.checkBody('codePostal', 'Code postal is required').notEmpty(); 
    req.checkBody('phoneNumber', 'Téléphone is required').notEmpty(); 
    req.checkBody('address', 'Address is required').notEmpty(); 
    req.checkBody('town', 'Town is required').notEmpty(); 

и

User.findOne({ username: req.body.username }, function(err, user) { 
     if (err) { 
     return res.status(400).send('Error updating account.'); 
     } 

     user.username = req.body.newUsername; //pass new 
Смежные вопросы