NewPasswordController.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. <?php
  2. namespace App\Http\Controllers\Auth;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Auth\Events\PasswordReset;
  5. use Illuminate\Http\JsonResponse;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\Hash;
  8. use Illuminate\Support\Facades\Password;
  9. use Illuminate\Support\Str;
  10. use Illuminate\Validation\Rules;
  11. use Illuminate\Validation\ValidationException;
  12. class NewPasswordController extends Controller
  13. {
  14. /**
  15. * Handle an incoming new password request.
  16. *
  17. * @throws \Illuminate\Validation\ValidationException
  18. */
  19. public function store(Request $request): JsonResponse
  20. {
  21. $request->validate([
  22. 'token' => ['required'],
  23. 'email' => ['required', 'email'],
  24. 'password' => ['required', 'confirmed', Rules\Password::defaults()],
  25. ]);
  26. // Here we will attempt to reset the user's password. If it is successful we
  27. // will update the password on an actual user model and persist it to the
  28. // database. Otherwise we will parse the error and return the response.
  29. $status = Password::reset(
  30. $request->only('email', 'password', 'password_confirmation', 'token'),
  31. function ($user) use ($request) {
  32. $user->forceFill([
  33. 'password' => Hash::make($request->string('password')),
  34. 'remember_token' => Str::random(60),
  35. ])->save();
  36. event(new PasswordReset($user));
  37. }
  38. );
  39. if ($status != Password::PASSWORD_RESET) {
  40. throw ValidationException::withMessages([
  41. 'email' => [__($status)],
  42. ]);
  43. }
  44. return response()->json(['status' => __($status)]);
  45. }
  46. }