Реализация сброса пароля в угловых 7 - PullRequest
0 голосов
/ 28 февраля 2019

Я следую за стеком MEAN и могу отправить электронное письмо с паролем сброса с маркером jwt в URL.Ссылка для сброса пароля имеет вид http://localhost:4200/reset/token. Как извлечь этот токен в угловом режиме при нажатии на ссылку и отправить запрос на публикацию для изменения пароля?Внутренняя реализация для отправки электронной почты ->

    function(done){
        Usermodel.findOne({email: req.body.email}, function(err, user){
            if(!user){
                return res.status(422).send({errors: [{title: 'Invalid email!', detail: 'User does not exist'}]});
            }

            const token = jwt.sign({
                userId: user.id,
                username: user.username,
                resetPasswordToken: user.resetPasswordToken
              }, config.SECRET, { expiresIn: '1h' });

            user.resetPasswordToken = token;
            user.resetPasswordExpires = Date.now() + 3600000; // 1 hour

            user.save(function(err){
                done(err, token, user);
            });
        });
    },
    function(token, user, done){
        const smtpTransport = nodemailer.createTransport({
            service: 'Gmail',
            auth: {
                user: 'XXXX',
                pass: 'XXXX'
            }
        });
            function(token, user, done){
        const smtpTransport = nodemailer.createTransport({
            service: 'Gmail',
            auth: {
                user: 'XXXX',
                pass: 'XXXX'
            }
        });

        const mailOptions = {
            to: user.email,
            from: 'xxxx@gmail.com',
            subject: 'Nodejs password reset',
            text: 'You are receiving this email. Please click on the email for password reset ' +
                  'http://' + req.headers.host + '/reset/' + token + '\n\n' + 
                  'If you did not request this, please ignore this email' 

        };
        smtpTransport.sendMail(mailOptions, function(err){
            console.log('mail sent');
            done(err, 'done');
        });
    }

// Bakend реализация для сброса пароля с использованием токена

    function(done) {
        Usermodel.findOne({ resetPasswordToken: req.params.token, resetPasswordExpires: { $gt: Date.now() } }, function(err, user){
            if(!user){
                return res.status(422).send({errors: [{title: 'error', detail: 'Password reset token is invalid or has expired'}]});
            }

            if(req.body.password === req.body.confirm){
                user.setPassword(req.body.password, function(err){
                    user.resetPasswordToken = undefined;
                    user.resetPasswordExpires = undefined;

                    user.save(function(err){
                        req.logIn(user, function(err) {
                            done(err, user);
                        });
                    });
                });
            } else {
                return res.status(422).send({errors: [{title: 'error', detail: 'Password do not match'}]});
            }
        });
    },
    function(user, done){
        var smtpTransport = nodemailer.createTransport({
            service: 'Gmail',
            auth: {
                user: 'XXXX',
                pass: 'XXXX'
            }
        });

        var mailOptions = {
            to: user.email,
            from: 'xxxx@gmail.com',
            subject: 'Your password has been changed',
            text: 'Hello,\n\n' + 
                'This is a confirmation that the password for your account ' + user.email + ' has just changed'
        };
        smtpTransport.sendMail(mailOptions, function(err){
            done(err);
        });
    }
],   function(err){
});

});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...