diff --git a/dashboard/src/views/PasswordResetView.vue b/dashboard/src/views/PasswordResetView.vue index 03a75254e..7ccbe948a 100644 --- a/dashboard/src/views/PasswordResetView.vue +++ b/dashboard/src/views/PasswordResetView.vue @@ -31,14 +31,18 @@ async function onPasswordReset() { error.value = {}; try { - await fetcher.post(`${API_ORIGIN}/api/v1/auth/password_reset_request`, { identifier: passwordResetIdentifier.value }); + const res = await fetcher.post(`${API_ORIGIN}/api/v1/auth/password_reset_request`, { identifier: passwordResetIdentifier.value }); + if (res.status === 409) { + error.value.generic = res.body.message; + } else if (res.status === 202) { + mode.value = MODE.NEW_PASSWORD_DONE; + } } catch (error) { error.value.generic = error; console.error('Failed to reset password.', error); } - busy.value = 'false'; - mode.value = MODE.RESET_PASSWORD_DONE; + busy.value = false; } async function onNewPassword() { @@ -107,6 +111,8 @@ onMounted(async () => {

{{ $t('passwordReset.title') }}

+

{{ error.generic }}

+
@@ -123,8 +129,7 @@ onMounted(async () => {
-

{{ error.generic }}

-

{{ $t('passwordReset.emailSent.title') }}

+

{{ $t('passwordReset.emailSent.title') }}

diff --git a/src/routes/auth.js b/src/routes/auth.js index ec2464e41..45aca6f2a 100644 --- a/src/routes/auth.js +++ b/src/routes/auth.js @@ -54,7 +54,7 @@ async function logout(req, res) { } async function passwordResetRequest(req, res, next) { - if (!req.body.identifier || typeof req.body.identifier !== 'string') return next(new HttpError(401, 'A identifier must be non-empty string')); + if (!req.body.identifier || typeof req.body.identifier !== 'string') return next(new HttpError(400, 'A identifier must be non-empty string')); const [error] = await safe(users.sendPasswordResetByIdentifier(req.body.identifier, AuditSource.fromRequest(req))); if (error && !(error.reason === BoxError.NOT_FOUND || error.reason === BoxError.CONFLICT)) return next(BoxError.toHttpError(error));