Fix password reset
This commit is contained in:
parent
b4eddf2180
commit
e7a8815106
2 changed files with 20 additions and 16 deletions
|
@ -84,7 +84,7 @@ export function* signup(email, password, ip) {
|
||||||
const existingUser = yield Users.findOne({email: email, status: {'$ne': 'deleted'}});
|
const existingUser = yield Users.findOne({email: email, status: {'$ne': 'deleted'}});
|
||||||
if (existingUser) {
|
if (existingUser) {
|
||||||
debug('Email already in use.');
|
debug('Email already in use.');
|
||||||
return 'Email already in use.';
|
throw new Error('Email already in use.');
|
||||||
}
|
}
|
||||||
const cryptedPassword = yield passwords.crypt(password);
|
const cryptedPassword = yield passwords.crypt(password);
|
||||||
var user = {
|
var user = {
|
||||||
|
@ -151,7 +151,7 @@ Visit ${process.env.BASE_URL + '/forgot/' + token} to set a new one.
|
||||||
]
|
]
|
||||||
}});
|
}});
|
||||||
} else {
|
} else {
|
||||||
return 'There was an error looking up your email address.';
|
throw new Error('There was an error looking up your email address.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,7 +180,7 @@ export function* validateResetToken() {
|
||||||
export function* updatePassword(userId, password) {
|
export function* updatePassword(userId, password) {
|
||||||
const Users = this.db.Users;
|
const Users = this.db.Users;
|
||||||
const cryptedPassword = yield passwords.crypt(password);
|
const cryptedPassword = yield passwords.crypt(password);
|
||||||
yield Users.update({_id: userId}, {'$set': {'salted_password': cryptedPassword}});
|
yield Users.updateOne({_id: userId}, {'$set': {'salted_password': cryptedPassword}});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
import { authenticate, setupSession, signup as signupUser, activateUser, sendResetToken, validateResetToken, updatePassword } from '../lib/auth';
|
import { authenticate, setupSession, signup as signupUser, activateUser, sendResetToken, validateResetToken, updatePassword } from '../lib/auth';
|
||||||
|
import debugname from 'debug';
|
||||||
|
const debug = debugname('hostr-web:user');
|
||||||
|
|
||||||
export function* signin() {
|
export function* signin() {
|
||||||
if (!this.request.body.email) {
|
if (!this.request.body.email) {
|
||||||
|
@ -50,30 +52,22 @@ export function* signup() {
|
||||||
export function* forgot() {
|
export function* forgot() {
|
||||||
const Reset = this.db.Reset;
|
const Reset = this.db.Reset;
|
||||||
const Users = this.db.Users;
|
const Users = this.db.Users;
|
||||||
if (this.request.body) {
|
|
||||||
return yield this.render('forgot', {token: null, csrf: this.csrf});
|
|
||||||
}
|
|
||||||
const token = this.params.token;
|
const token = this.params.token;
|
||||||
|
|
||||||
this.assertCSRF(this.request.body);
|
if (this.request.body.password) {
|
||||||
if (this.request.body.email) {
|
|
||||||
var email = this.request.body.email;
|
|
||||||
yield sendResetToken.call(this, email);
|
|
||||||
this.statsd.incr('auth.reset.request', 1);
|
|
||||||
return yield this.render('forgot', {message: 'We\'ve sent an email with a link to reset your password. Be sure to check your spam folder if you it doesn\'t appear within a few minutes', token: null, csrf: this.csrf});
|
|
||||||
} else if (token && this.request.body.password) {
|
|
||||||
if (this.request.body.password.length < 7) {
|
if (this.request.body.password.length < 7) {
|
||||||
return yield this.render('forgot', {error: 'Password needs to be at least 7 characters long.', token: token, csrf: this.csrf});
|
return yield this.render('forgot', {error: 'Password needs to be at least 7 characters long.', token: token, csrf: this.csrf});
|
||||||
}
|
}
|
||||||
|
this.assertCSRF(this.request.body);
|
||||||
const tokenUser = yield validateResetToken.call(this, token);
|
const tokenUser = yield validateResetToken.call(this, token);
|
||||||
var userId = tokenUser._id;
|
var userId = tokenUser._id;
|
||||||
yield updatePassword.call(this, userId, this.request.body.password);
|
yield updatePassword.call(this, userId, this.request.body.password);
|
||||||
yield Reset.remove({_id: userId});
|
yield Reset.deleteOne({_id: userId});
|
||||||
const user = yield Users.findOne({_id: userId});
|
const user = yield Users.findOne({_id: userId});
|
||||||
yield setupSession.call(this, user);
|
yield setupSession.call(this, user);
|
||||||
this.statsd.incr('auth.reset.success', 1);
|
this.statsd.incr('auth.reset.success', 1);
|
||||||
this.redirect('/');
|
this.redirect('/');
|
||||||
} else if (token.length) {
|
} else if (token) {
|
||||||
const tokenUser = yield validateResetToken.call(this, token);
|
const tokenUser = yield validateResetToken.call(this, token);
|
||||||
if (!tokenUser) {
|
if (!tokenUser) {
|
||||||
this.statsd.incr('auth.reset.fail', 1);
|
this.statsd.incr('auth.reset.fail', 1);
|
||||||
|
@ -81,8 +75,18 @@ export function* forgot() {
|
||||||
} else {
|
} else {
|
||||||
return yield this.render('forgot', {token: token, csrf: this.csrf});
|
return yield this.render('forgot', {token: token, csrf: this.csrf});
|
||||||
}
|
}
|
||||||
|
} else if (this.request.body.email) {
|
||||||
|
this.assertCSRF(this.request.body);
|
||||||
|
try {
|
||||||
|
var email = this.request.body.email;
|
||||||
|
yield sendResetToken.call(this, email);
|
||||||
|
this.statsd.incr('auth.reset.request', 1);
|
||||||
|
return yield this.render('forgot', {message: 'We\'ve sent an email with a link to reset your password. Be sure to check your spam folder if you it doesn\'t appear within a few minutes', token: null, csrf: this.csrf});
|
||||||
|
} catch (error) {
|
||||||
|
debug(error);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return yield this.render('forgot', {token: null, csrf: this.csrf});
|
yield this.render('forgot', {token: null, csrf: this.csrf});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue