Skip to content

Commit 8f089b5

Browse files
authored
Merge pull request #23 from cristianopacheco/add-throttles-logins
Add Login Throttling.
2 parents ba61b09 + e3f7e53 commit 8f089b5

File tree

4 files changed

+47
-32
lines changed

4 files changed

+47
-32
lines changed

webservice/app/Http/Controllers/LoginController.php

Lines changed: 45 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,64 @@
22

33
namespace App\Http\Controllers;
44

5+
use Illuminate\Foundation\Auth\ThrottlesLogins;
56
use Illuminate\Http\Request;
7+
use Illuminate\Http\Response;
68
use Auth;
7-
use JWTException;
9+
use Lang;
810

911
class LoginController extends Controller
1012
{
13+
use ThrottlesLogins;
14+
1115
public function login(Request $request)
1216
{
13-
// grab credentials from the request
17+
if ($this->hasTooManyLoginAttempts($request)) {
18+
$this->fireLockoutEvent($request);
19+
20+
return $this->sendLockoutResponse($request);
21+
}
22+
1423
$credentials = $request->only('email', 'password');
1524

16-
try {
17-
// attempt to verify the credentials and create a token for the user
18-
if (!$token = Auth::guard('api')->attempt($credentials)) {
19-
return response()->json(['messages' => ['E-mail ou senha não conferem']], 401);
20-
}
21-
} catch (JWTException $e) {
22-
// something went wrong whilst attempting to encode the token
23-
return response()->json(['messages' => ['Não foi possível gerar o token']], 500);
25+
if ($token = Auth::guard('api')->attempt($credentials)) {
26+
return $this->sendLoginResponse($request, $token);
2427
}
2528

29+
$this->incrementLoginAttempts($request);
30+
31+
return $this->sendFailedLoginResponse($request);
32+
}
33+
34+
protected function sendLoginResponse(Request $request, $token)
35+
{
36+
$this->clearLoginAttempts($request);
37+
2638
$user = Auth::guard('api')->user();
2739

28-
// all good so return the token
2940
return response()->json(compact('token', 'user'));
3041
}
42+
43+
protected function sendFailedLoginResponse(Request $request)
44+
{
45+
$message = Lang::get('auth.failed');
46+
47+
return response()->json(['messages' => [$message]], 401);
48+
}
49+
50+
public function sendLockoutResponse(Request $request)
51+
{
52+
$seconds = $this->limiter()->availableIn(
53+
$this->throttleKey($request)
54+
);
55+
56+
$message = Lang::get('auth.throttle', ['seconds' => $seconds]);
57+
58+
return response()->json(['messages' => [$message]], Response::HTTP_TOO_MANY_REQUESTS);
59+
}
60+
61+
public function username()
62+
{
63+
return 'email';
64+
}
3165
}

webservice/app/Http/Kernel.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,6 @@ class Kernel extends HttpKernel
5252
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
5353
'can' => \Illuminate\Auth\Middleware\Authorize::class,
5454
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
55-
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
56-
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
57-
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,
55+
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class
5856
];
5957
}

webservice/app/Providers/EventServiceProvider.php

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -26,20 +26,5 @@ class EventServiceProvider extends ServiceProvider
2626
public function boot()
2727
{
2828
parent::boot();
29-
30-
Event::listen('tymon.jwt.absent', function () {
31-
return response()->json(
32-
['reason' => 'token', 'messages' => ['Token not provided']], 400);
33-
});
34-
35-
Event::listen('tymon.jwt.expired', function () {
36-
return response()->json(
37-
['reason' => 'token', 'messages' => ['Expired Token']], 400);
38-
});
39-
40-
Event::listen('tymon.jwt.invalid', function () {
41-
return response()->json(
42-
['reason' => 'token', 'messages' => ['Invalid Token']], 400);
43-
});
4429
}
4530
}

webservice/routes/api.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
<?php
22

3-
use Illuminate\Http\Request;
4-
53
Route::group(['middleware' => ['cors', 'api']], function () {
64
Route::post('login', ['uses' => 'LoginController@login']);
7-
Route::group(['middleware' => 'jwt.auth'], function () {
5+
Route::group(['middleware' => 'auth:api'], function () {
86
Route::group(['prefix' => 'categories'], function () {
97
Route::get('', ['uses' => 'CategoriesController@all']);
108
Route::get('{id}/get', ['uses' => 'CategoriesController@get']);

0 commit comments

Comments
 (0)