Skip to content

Commit 18d75da

Browse files
Display errors on the login form
1 parent df54a75 commit 18d75da

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

default-views/auth/login.hbs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,13 @@
1313
<div class="container">
1414
<form method="post" action="/login">
1515
<div class="form-group">
16+
{{#if error}}
17+
<div class="row">
18+
<div class="col-md-12">
19+
<p class="text-danger"><strong>{{error}}</strong></p>
20+
</div>
21+
</div>
22+
{{/if}}
1623
<div class="row">
1724
<div class="col-md-12">
1825
<label for="username">Username:</label>

lib/requests/login-request.js

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -60,15 +60,10 @@ class LoginByPasswordRequest {
6060
* @return {Promise}
6161
*/
6262
static handle (req, res) {
63-
let request
64-
65-
try {
66-
request = LoginByPasswordRequest.fromParams(req, res)
67-
} catch (error) {
68-
return Promise.reject(error)
69-
}
63+
const request = LoginByPasswordRequest.fromParams(req, res)
7064

7165
return LoginByPasswordRequest.login(request)
66+
.catch(request.error.bind(request))
7267
}
7368

7469
/**
@@ -156,23 +151,30 @@ class LoginByPasswordRequest {
156151
return extracted
157152
}
158153

154+
error (error) {
155+
let res = this.response
156+
let params = Object.assign({}, this.authQueryParams, { error: error.message })
157+
res.statusCode(error.statusCode || 400)
158+
res.render('auth/login', params)
159+
}
160+
159161
/**
160162
* Validates the Login request (makes sure required parameters are present),
161163
* and throws an error if not.
162164
*
163-
* @throws {TypeError} If missing required params
165+
* @throws {Error} If missing required params
164166
*/
165167
validate () {
166168
let error
167169

168170
if (!this.username) {
169-
error = new TypeError('Username required')
171+
error = new Error('Username required')
170172
error.statusCode = 400
171173
throw error
172174
}
173175

174176
if (!this.password) {
175-
error = new TypeError('Password required')
177+
error = new Error('Password required')
176178
error.statusCode = 400
177179
throw error
178180
}
@@ -182,7 +184,7 @@ class LoginByPasswordRequest {
182184
* Loads a user from the user store, and if one is found and the
183185
* password matches, returns a `UserAccount` instance for that user.
184186
*
185-
* @throws {TypeError} If
187+
* @throws {Error} If failures to load user are encountered
186188
*
187189
* @return {Promise<UserAccount>}
188190
*/
@@ -208,7 +210,7 @@ class LoginByPasswordRequest {
208210
})
209211
.then(foundUser => {
210212
if (!foundUser) {
211-
error = new TypeError('No user found for that username')
213+
error = new Error('No user found for that username')
212214
error.statusCode = 400
213215
throw error
214216
}
@@ -217,7 +219,7 @@ class LoginByPasswordRequest {
217219
})
218220
.then(validUser => {
219221
if (!validUser) {
220-
error = new TypeError('User found but no password found')
222+
error = new Error('User found but no password found')
221223
error.statusCode = 400
222224
throw error
223225
}

0 commit comments

Comments
 (0)