AuthenticatesUsers.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace Illuminate\Foundation\Auth;
  3. use Illuminate\Http\JsonResponse;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Auth;
  6. use Illuminate\Validation\ValidationException;
  7. trait AuthenticatesUsers
  8. {
  9. use RedirectsUsers, ThrottlesLogins;
  10. /**
  11. * Show the application's login form.
  12. *
  13. * @return \Illuminate\View\View
  14. */
  15. public function showLoginForm()
  16. {
  17. return view('auth.login');
  18. }
  19. /**
  20. * Handle a login request to the application.
  21. *
  22. * @param \Illuminate\Http\Request $request
  23. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\Response|\Illuminate\Http\JsonResponse
  24. *
  25. * @throws \Illuminate\Validation\ValidationException
  26. */
  27. public function login(Request $request)
  28. {
  29. $this->validateLogin($request);
  30. // If the class is using the ThrottlesLogins trait, we can automatically throttle
  31. // the login attempts for this application. We'll key this by the username and
  32. // the IP address of the client making these requests into this application.
  33. if (method_exists($this, 'hasTooManyLoginAttempts') &&
  34. $this->hasTooManyLoginAttempts($request)) {
  35. $this->fireLockoutEvent($request);
  36. return $this->sendLockoutResponse($request);
  37. }
  38. if ($this->attemptLogin($request)) {
  39. return $this->sendLoginResponse($request);
  40. }
  41. // If the login attempt was unsuccessful we will increment the number of attempts
  42. // to login and redirect the user back to the login form. Of course, when this
  43. // user surpasses their maximum number of attempts they will get locked out.
  44. $this->incrementLoginAttempts($request);
  45. return $this->sendFailedLoginResponse($request);
  46. }
  47. /**
  48. * Validate the user login request.
  49. *
  50. * @param \Illuminate\Http\Request $request
  51. * @return void
  52. *
  53. * @throws \Illuminate\Validation\ValidationException
  54. */
  55. protected function validateLogin(Request $request)
  56. {
  57. $request->validate([
  58. $this->username() => 'required|string',
  59. 'password' => 'required|string',
  60. ]);
  61. }
  62. /**
  63. * Attempt to log the user into the application.
  64. *
  65. * @param \Illuminate\Http\Request $request
  66. * @return bool
  67. */
  68. protected function attemptLogin(Request $request)
  69. {
  70. return $this->guard()->attempt(
  71. $this->credentials($request), $request->filled('remember')
  72. );
  73. }
  74. /**
  75. * Get the needed authorization credentials from the request.
  76. *
  77. * @param \Illuminate\Http\Request $request
  78. * @return array
  79. */
  80. protected function credentials(Request $request)
  81. {
  82. return $request->only($this->username(), 'password');
  83. }
  84. /**
  85. * Send the response after the user was authenticated.
  86. *
  87. * @param \Illuminate\Http\Request $request
  88. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  89. */
  90. protected function sendLoginResponse(Request $request)
  91. {
  92. $request->session()->regenerate();
  93. $this->clearLoginAttempts($request);
  94. if ($response = $this->authenticated($request, $this->guard()->user())) {
  95. return $response;
  96. }
  97. return $request->wantsJson()
  98. ? new JsonResponse([], 204)
  99. : redirect()->intended($this->redirectPath());
  100. }
  101. /**
  102. * The user has been authenticated.
  103. *
  104. * @param \Illuminate\Http\Request $request
  105. * @param mixed $user
  106. * @return mixed
  107. */
  108. protected function authenticated(Request $request, $user)
  109. {
  110. //
  111. }
  112. /**
  113. * Get the failed login response instance.
  114. *
  115. * @param \Illuminate\Http\Request $request
  116. * @return \Symfony\Component\HttpFoundation\Response
  117. *
  118. * @throws \Illuminate\Validation\ValidationException
  119. */
  120. protected function sendFailedLoginResponse(Request $request)
  121. {
  122. throw ValidationException::withMessages([
  123. $this->username() => [trans('auth.failed')],
  124. ]);
  125. }
  126. /**
  127. * Get the login username to be used by the controller.
  128. *
  129. * @return string
  130. */
  131. public function username()
  132. {
  133. return 'email';
  134. }
  135. /**
  136. * Log the user out of the application.
  137. *
  138. * @param \Illuminate\Http\Request $request
  139. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  140. */
  141. public function logout(Request $request)
  142. {
  143. $this->guard()->logout();
  144. $request->session()->invalidate();
  145. $request->session()->regenerateToken();
  146. if ($response = $this->loggedOut($request)) {
  147. return $response;
  148. }
  149. return $request->wantsJson()
  150. ? new JsonResponse([], 204)
  151. : redirect('/');
  152. }
  153. /**
  154. * The user has logged out of the application.
  155. *
  156. * @param \Illuminate\Http\Request $request
  157. * @return mixed
  158. */
  159. protected function loggedOut(Request $request)
  160. {
  161. //
  162. }
  163. /**
  164. * Get the guard to be used during authentication.
  165. *
  166. * @return \Illuminate\Contracts\Auth\StatefulGuard
  167. */
  168. protected function guard()
  169. {
  170. return Auth::guard();
  171. }
  172. }