loopback-reset-password-mixin
Version:
Add reset password functionality to a loopback project.
87 lines (77 loc) • 2.93 kB
JavaScript
var nodemailer = require('nodemailer');
var path = require('path');
var aws = require('aws-sdk');
module.exports = function (Model, options) {
aws.config.region = process.env.AWS_DEFAULT_REGION || 'us-west-2';
var transporter = nodemailer.createTransport({
SES: new aws.SES({
apiVersion: '2010-12-01'
})
});
Model.on('attached' , function () {
/**
*
*/
Model.app.get('/request-password-reset', function (request, response, next) {
response.sendFile(path.join(__dirname + '/views/reset-password.html'));
});
/**
*
*/
Model.app.get('/confirm-password-reset', function (request, response, next) {
response.sendFile(path.join(__dirname + '/views/confirm-password.html'));
});
/**
*
*/
Model.app.post('/request-password-reset', function(request, response, next) {
Model.resetPassword({
email: request.body.email
}, function(err) {
if (err) return response.status(401).send(err);
else return response.status(200).send({
statusCode:200,
message:'We have sent you a email. Please check your email to reset your password'
});
});
});
/**
*
*/
Model.app.post('/confirm-password-reset', function(request, response, next) {
if(!request.accessToken)
return response.status(404).send({
error: 'Incorrect Token',
statusCode:404,
message:'Valid token not found'});
Model.findById(request.accessToken.userId, function(err, user) {
if(err)
return response.status(404).send(err);
else {
user.updateAttribute('password',request.body.password, function(err, res){
if (err) return response.status(404).send(err);
return response.status(200).send({
statusCode:200,
message:'password reset processed successfully'
});
});
}
});
});
});
Model.on('resetPasswordRequest', function (info) {
var settings = Model.app.settings;
var html = 'Click on <a href="'+settings.protocol+'://'+settings.host+':'+settings.port+'/confirm-password-reset?access_token=' + info.accessToken.id + '">this</a> url to reset your password';
transporter.sendMail({
from: process.env.RESET_PASSWORD_EMAIL,
to: info.user.email,
subject: 'Reset your password',
html: html
}, function (err, success) {
if(err)
console.log('error from the mailer', err);
else
console.log('success from the mailer', success);
});
});
};