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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.