Skip to content

Commit 89aa359

Browse files
author
Raymond Feng
committed
Set the correct status code for User.login
See #118
1 parent 9c13c07 commit 89aa359

File tree

2 files changed

+41
-1
lines changed

2 files changed

+41
-1
lines changed

lib/models/user.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,14 @@ User.login = function (credentials, include, fn) {
149149
} else if(credentials.username) {
150150
query.username = credentials.username;
151151
} else {
152-
return fn(new Error('must provide username or email'));
152+
var err = new Error('username or email is required');
153+
err.statusCode = 400;
154+
return fn(err);
153155
}
154156

155157
this.findOne({where: query}, function(err, user) {
156158
var defaultError = new Error('login failed');
159+
defaultError.statusCode = 401;
157160

158161
if(err) {
159162
debug('An error is reported from User.findOne: %j', err);

test/user.test.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ var userMemory = loopback.createDataSource({
99

1010
describe('User', function(){
1111
var validCredentials = {email: '[email protected]', password: 'bar'};
12+
var invalidCredentials = {email: '[email protected]', password: 'bar1'};
13+
var incompleteCredentials = {password: 'bar1'};
14+
1215
beforeEach(function() {
1316
User = loopback.User.extend('user');
1417
User.email = loopback.Email.extend('email');
@@ -135,6 +138,40 @@ describe('User', function(){
135138
});
136139
});
137140

141+
it('Login a user over REST by providing invalid credentials', function(done) {
142+
request(app)
143+
.post('/users/login')
144+
.expect('Content-Type', /json/)
145+
.expect(401)
146+
.send(invalidCredentials)
147+
.end(function(err, res){
148+
done();
149+
});
150+
});
151+
152+
it('Login a user over REST by providing incomplete credentials', function(done) {
153+
request(app)
154+
.post('/users/login')
155+
.expect('Content-Type', /json/)
156+
.expect(400)
157+
.send(incompleteCredentials)
158+
.end(function(err, res){
159+
done();
160+
});
161+
});
162+
163+
it('Login a user over REST with the wrong Content-Type', function(done) {
164+
request(app)
165+
.post('/users/login')
166+
.set('Content-Type', null)
167+
.expect('Content-Type', /json/)
168+
.expect(400)
169+
.send(validCredentials)
170+
.end(function(err, res){
171+
done();
172+
});
173+
});
174+
138175
it('Returns current user when `include` is `USER`', function(done) {
139176
request(app)
140177
.post('/users/login?include=USER')

0 commit comments

Comments
 (0)