Софтуерно Инженерство
Loading...
+ Нов въпрос
Steis avatar Steis 3 Точки

Blog JS - Edit User Registration

Здравейте,

ако може някой да помогне...

в часта Edit User Registration  като опитам да регистрирам юзер , ми дава съобщение за грешка - User with the same username exists!, въпреки че юзера си е съвсем нов и се добавя в базата данни.

Освен това в сторма ми излиза грешка:

"C:\Program Files (x86)\JetBrains\WebStorm 2016.3.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Softmodul\JS\SoftUniBlogSkeleton\SoftUniBlog\bin\www
MongoDB ready!
(node:10352) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'push' of undefined
(node:10352) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
 

Кода го проверявах ред по ред и не мога да открия грешка.

Ето :

registerPost:(req, res) => {
    let registerArgs = req.body;

    User.findOne({email: registerArgs.email}).then(user => {
        let errorMsg = '';
        if (user) {
            errorMsg = 'User with the same username exists!';
        } else if (registerArgs.password !== registerArgs.repeatedPassword) {
            errorMsg = 'Passwords do not match!'
        }

        if (errorMsg) {
            registerArgs.error = errorMsg;
            res.render('user/register', registerArgs)
        } else {
            let salt = encryption.generateSalt();
            let passwordHash = encryption.hashPassword(registerArgs.password, salt);

            let roles = [];

            let userObject = {
                email: registerArgs.email,
                passwordHash: passwordHash,
                fullName: registerArgs.fullName,
                salt: salt,
                roles: roles
            };

            Role.findOne({name: 'User'}).then(role => {
                roles.push(role.id);

                User.create(userObject).then(user => {
                    role.users.push(user.id);
                    role.save(err => {
                        if (err) {
                            registerArgs.error = err.message;
                            res.render('user/register', registerArgs);
                        } else {
                            req.logIn(user, (err) => {
                                if (err) {
                                    registerArgs.error = err.message;
                                    res.render('user/register', registerArgs);
                                    return;
                                }

                                res.redirect('/');
                            })
                        }
                    });
                })
            });
        }
    })
},

 

 

Тагове:
plamen911 avatar plamen911 80 Точки

Кодът ти изглежда правилен. Напиши console.log(user), за да провериш защо ти дава, че user не е null, т.е. вече съществува. За да не ти излиза грешката в WebStorm, във файл /config/database.js първите 2 реда трябва да изглеждат така:

const mongoose = require('mongoose')
mongoose.Promise = global.Promise

Проблемът идва от лошата имплементация на Promise в Mongoose.

0
06/04/2017 22:07:09
Steis avatar Steis 3 Точки

Благодаря за помоща, но все още не мога да оправя проблема. Все още ми изкарва грешка въпреки че console.log(user) връща null. Според мен вместо да ме логне, ми прави нова проверка дали юзера е регистриран, но защо ... нямам никаква идея :)

Първите два реда в /config/database.js са си ок.

null
null
(node:8068) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'push' of undefined
(node:8068) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.

При нова проверка с console.log(user), 

} else {
            console.log(user) // null
            let salt = encryption.generateSalt();

поставих го и тук:

 if (user) {
            errorMsg = 'User with the same username exists!';
            console.log(user) // връща юзера, който създавам

MongoDB ready!
null 
(node:13344) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): TypeError: Cannot read property 'push' of undefined
(node:13344) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
{ _id: 58e69d8ae78f8b3420dd5dc2,
  email: 'em@em.bg',
  passwordHash: '6bbbec0a826e5c6823119e8cf9f2232c8f3dfcca8236c908fb24c5e3efa912a7',
  fullName: 'sma',
  salt: 'TAfvdiWlBhK3j75lA2NCzwI02ZPhWLXvfviWpeFs6bExMTqOSGU1b9b3zHSO7wz8hf/cSwEjzRoFTE1lQzmd5ptihBQRPoTKpXhDjIbrZ1A0siQJv8Q3+iGTJ52Iq7Jv0vlrs429D55Gykq9sgTFI6ohE6dcoAE0afyfM/BMxwY=',
  __v: 0,
  roles: [ 58e555bc70aa661d383477cb ],
  articles: [] }

0
06/04/2017 23:11:19
worminer avatar worminer 104 Точки

Здравей.

И в базата няма потребител с e-mail em@em.bg ?

да не би да е хардкоднат някъде ?

след този ред сложи конзол логг-а

 User.findOne({email: registerArgs.email}).then(user => {
0
Steis avatar Steis 3 Точки

Всички юзери се създават без проблем в базата.

Въпросът е, че като дам Submit  да се регистрира юзера, би трябвало като го създаде в базата да го логне, но вместо това, ми връща регистрационната форма със съобщение - този юзер вече съществува.

Ако логна юзера - работи, създавам му статии...функционира си :)

Проблема е, че не го логва веднага като го регистрирвам

 

0