SendsPasswordResetEmails.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <?php
  2. namespace Illuminate\Foundation\Auth;
  3. use Illuminate\Http\JsonResponse;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Password;
  6. use Illuminate\Validation\ValidationException;
  7. trait SendsPasswordResetEmails
  8. {
  9. /**
  10. * Display the form to request a password reset link.
  11. *
  12. * @return \Illuminate\View\View
  13. */
  14. public function showLinkRequestForm()
  15. {
  16. return view('auth.passwords.email');
  17. }
  18. /**
  19. * Send a reset link to the given user.
  20. *
  21. * @param \Illuminate\Http\Request $request
  22. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  23. */
  24. public function sendResetLinkEmail(Request $request)
  25. {
  26. $this->validateEmail($request);
  27. // We will send the password reset link to this user. Once we have attempted
  28. // to send the link, we will examine the response then see the message we
  29. // need to show to the user. Finally, we'll send out a proper response.
  30. $response = $this->broker()->sendResetLink(
  31. $this->credentials($request)
  32. );
  33. return $response == Password::RESET_LINK_SENT
  34. ? $this->sendResetLinkResponse($request, $response)
  35. : $this->sendResetLinkFailedResponse($request, $response);
  36. }
  37. /**
  38. * Validate the email for the given request.
  39. *
  40. * @param \Illuminate\Http\Request $request
  41. * @return void
  42. */
  43. protected function validateEmail(Request $request)
  44. {
  45. $request->validate(['email' => 'required|email']);
  46. }
  47. /**
  48. * Get the needed authentication credentials from the request.
  49. *
  50. * @param \Illuminate\Http\Request $request
  51. * @return array
  52. */
  53. protected function credentials(Request $request)
  54. {
  55. return $request->only('email');
  56. }
  57. /**
  58. * Get the response for a successful password reset link.
  59. *
  60. * @param \Illuminate\Http\Request $request
  61. * @param string $response
  62. * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
  63. */
  64. protected function sendResetLinkResponse(Request $request, $response)
  65. {
  66. return $request->wantsJson()
  67. ? new JsonResponse(['message' => trans($response)], 200)
  68. : back()->with('status', trans($response));
  69. }
  70. /**
  71. * Get the response for a failed password reset link.
  72. *
  73. * @param \Illuminate\Http\Request $request
  74. * @param string $response
  75. * @return \Illuminate\Http\RedirectResponse
  76. *
  77. * @throws \Illuminate\Validation\ValidationException
  78. */
  79. protected function sendResetLinkFailedResponse(Request $request, $response)
  80. {
  81. if ($request->wantsJson()) {
  82. throw ValidationException::withMessages([
  83. 'email' => [trans($response)],
  84. ]);
  85. }
  86. return back()
  87. ->withInput($request->only('email'))
  88. ->withErrors(['email' => trans($response)]);
  89. }
  90. /**
  91. * Get the broker to be used during password reset.
  92. *
  93. * @return \Illuminate\Contracts\Auth\PasswordBroker
  94. */
  95. public function broker()
  96. {
  97. return Password::broker();
  98. }
  99. }