LoginController.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use Illuminate\Http\Request;
  4. use Illuminate\Http\Response;
  5. use App\Http\Controllers\Controller;
  6. use Illuminate\Support\Facades\Auth;
  7. use Illuminate\Support\Facades\Lang;
  8. use Illuminate\Validation\ValidationException;
  9. use Illuminate\Foundation\Auth\AuthenticatesUsers;
  10. class LoginController extends Controller
  11. {
  12. /*
  13. |--------------------------------------------------------------------------
  14. | Login Controller
  15. |--------------------------------------------------------------------------
  16. |
  17. | This controller handles authenticating users for the application.
  18. | The controller uses a trait to conveniently provide its functionality
  19. | to your applications.
  20. |
  21. */
  22. use AuthenticatesUsers;
  23. /**
  24. * Handle a login request to the application.
  25. *
  26. * @param \Illuminate\Http\Request $request
  27. * @return \Illuminate\Http\JsonResponse
  28. *
  29. * @throws \Illuminate\Validation\ValidationException
  30. */
  31. public function login(Request $request)
  32. {
  33. $this->validateLogin($request);
  34. // If the class is using the ThrottlesLogins trait, we can automatically throttle
  35. // the login attempts for this application. We'll key this by the username and
  36. // the IP address of the client making these requests into this application.
  37. if (method_exists($this, 'hasTooManyLoginAttempts') &&
  38. $this->hasTooManyLoginAttempts($request)) {
  39. $this->fireLockoutEvent($request);
  40. return $this->sendLockoutResponse($request);
  41. }
  42. if ($this->attemptLogin($request)) {
  43. return $this->sendLoginResponse($request);
  44. }
  45. // If the login attempt was unsuccessful we will increment the number of attempts
  46. // to login and redirect the user back to the login form. Of course, when this
  47. // user surpasses their maximum number of attempts they will get locked out.
  48. $this->incrementLoginAttempts($request);
  49. return $this->sendFailedLoginResponse($request);
  50. }
  51. /**
  52. * Send the response after the user was authenticated.
  53. *
  54. * @param \Illuminate\Http\Request $request
  55. * @return \Illuminate\Http\JsonResponse
  56. */
  57. protected function sendLoginResponse(Request $request)
  58. {
  59. $this->clearLoginAttempts($request);
  60. $success['token'] = $this->guard()->user()->createToken('2FAuth')->accessToken;
  61. $success['name'] = $this->guard()->user()->name;
  62. return response()->json(['message' => $success], Response::HTTP_OK);
  63. }
  64. /**
  65. * Get the failed login response instance.
  66. *
  67. * @param \Illuminate\Http\Request $request
  68. * @return \Illuminate\Http\JsonResponse
  69. */
  70. protected function sendFailedLoginResponse(Request $request)
  71. {
  72. return response()->json(['message' => 'unauthorised'], Response::HTTP_UNAUTHORIZED);
  73. }
  74. /**
  75. * Redirect the user after determining they are locked out.
  76. *
  77. * @param \Illuminate\Http\Request $request
  78. * @return \Illuminate\Http\JsonResponse
  79. */
  80. protected function sendLockoutResponse(Request $request)
  81. {
  82. $seconds = $this->limiter()->availableIn(
  83. $this->throttleKey($request)
  84. );
  85. return response()->json(['message' => Lang::get('auth.throttle', ['seconds' => $seconds])], Response::HTTP_TOO_MANY_REQUESTS);
  86. }
  87. /**
  88. * Validate the user login request.
  89. *
  90. * @param \Illuminate\Http\Request $request
  91. * @return void
  92. *
  93. * @throws \Illuminate\Validation\ValidationException
  94. */
  95. protected function validateLogin(Request $request)
  96. {
  97. $request->validate([
  98. $this->username() => 'required|string|exists:users,email',
  99. 'password' => 'required|string',
  100. ]);
  101. }
  102. /**
  103. * log out current user
  104. * @param Request $request
  105. * @return \Illuminate\Http\JsonResponse
  106. */
  107. public function logout(Request $request)
  108. {
  109. $accessToken = Auth::user()->token();
  110. $accessToken->revoke();
  111. return response()->json(['message' => 'signed out'], Response::HTTP_OK);
  112. }
  113. }