ForgotPasswordController.php 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Http\Controllers\Controller;
  4. use App\Models\User;
  5. use Illuminate\Foundation\Auth\SendsPasswordResetEmails;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Password;
  8. class ForgotPasswordController extends Controller
  9. {
  10. /*
  11. |--------------------------------------------------------------------------
  12. | Password Reset Controller
  13. |--------------------------------------------------------------------------
  14. |
  15. | This controller is responsible for handling password reset emails and
  16. | includes a trait which assists in sending these notifications from
  17. | your application to your users. Feel free to explore this trait.
  18. |
  19. */
  20. use SendsPasswordResetEmails;
  21. /**
  22. * Create a new controller instance.
  23. *
  24. * @return void
  25. */
  26. public function __construct()
  27. {
  28. $this->middleware('guest');
  29. $this->middleware('throttle:3,1')->only('sendResetLinkEmail');
  30. }
  31. /**
  32. * Send a reset link to the given user.
  33. *
  34. * @param \Illuminate\Http\Request $request
  35. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  36. */
  37. public function sendResetLinkEmail(Request $request)
  38. {
  39. $this->validateUsername($request);
  40. // We will send the password reset link to this user. Once we have attempted
  41. // to send the link, we will examine the response then see the message we
  42. // need to show to the user. Finally, we'll send out a proper response.
  43. $response = $this->broker()->sendResetLink(
  44. $request->only('username')
  45. );
  46. return $response == Password::RESET_LINK_SENT
  47. ? $this->sendResetLinkResponse($request, $response)
  48. : $this->sendResetLinkFailedResponse($request, $response);
  49. }
  50. /**
  51. * Validate the email for the given request.
  52. *
  53. * @param \Illuminate\Http\Request $request
  54. * @return void
  55. */
  56. protected function validateUsername(Request $request)
  57. {
  58. $request->validate(['username' => 'required|regex:/^[a-zA-Z0-9]*$/|max:20']);
  59. }
  60. /**
  61. * Get the response for a failed password reset link.
  62. *
  63. * @param \Illuminate\Http\Request $request
  64. * @param string $response
  65. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  66. */
  67. protected function sendResetLinkFailedResponse(Request $request, $response)
  68. {
  69. return back()
  70. ->withInput($request->only('username'))
  71. ->withErrors(['username' => trans($response)]);
  72. }
  73. }