| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | <?phpnamespace Illuminate\Foundation\Auth;use Illuminate\Auth\Events\PasswordReset;use Illuminate\Http\JsonResponse;use Illuminate\Http\Request;use Illuminate\Support\Facades\Auth;use Illuminate\Support\Facades\Hash;use Illuminate\Support\Facades\Password;use Illuminate\Support\Str;use Illuminate\Validation\Rules;use Illuminate\Validation\ValidationException;trait ResetsPasswords{    use RedirectsUsers;    /**     * Display the password reset view for the given token.     *     * If no token is present, display the link request form.     *     * @param  \Illuminate\Http\Request  $request     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View     */    public function showResetForm(Request $request)    {        $token = $request->route()->parameter('token');        return view('auth.passwords.reset')->with(            ['token' => $token, 'email' => $request->email]        );    }    /**     * Reset the given user's password.     *     * @param  \Illuminate\Http\Request  $request     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse     */    public function reset(Request $request)    {        $request->validate($this->rules(), $this->validationErrorMessages());        // Here we will attempt to reset the user's password. If it is successful we        // will update the password on an actual user model and persist it to the        // database. Otherwise we will parse the error and return the response.        $response = $this->broker()->reset(            $this->credentials($request), function ($user, $password) {                $this->resetPassword($user, $password);            }        );        // If the password was successfully reset, we will redirect the user back to        // the application's home authenticated view. If there is an error we can        // redirect them back to where they came from with their error message.        return $response == Password::PASSWORD_RESET                    ? $this->sendResetResponse($request, $response)                    : $this->sendResetFailedResponse($request, $response);    }    /**     * Get the password reset validation rules.     *     * @return array     */    protected function rules()    {        return [            'token' => 'required',            'email' => 'required|email',            'password' => ['required', 'confirmed', Rules\Password::defaults()],        ];    }    /**     * Get the password reset validation error messages.     *     * @return array     */    protected function validationErrorMessages()    {        return [];    }    /**     * Get the password reset credentials from the request.     *     * @param  \Illuminate\Http\Request  $request     * @return array     */    protected function credentials(Request $request)    {        return $request->only(            'email', 'password', 'password_confirmation', 'token'        );    }    /**     * Reset the given user's password.     *     * @param  \Illuminate\Contracts\Auth\CanResetPassword  $user     * @param  string  $password     * @return void     */    protected function resetPassword($user, $password)    {        $this->setUserPassword($user, $password);        $user->setRememberToken(Str::random(60));        $user->save();        event(new PasswordReset($user));        $this->guard()->login($user);    }    /**     * Set the user's password.     *     * @param  \Illuminate\Contracts\Auth\CanResetPassword  $user     * @param  string  $password     * @return void     */    protected function setUserPassword($user, $password)    {        $user->password = Hash::make($password);    }    /**     * Get the response for a successful password reset.     *     * @param  \Illuminate\Http\Request  $request     * @param  string  $response     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse     */    protected function sendResetResponse(Request $request, $response)    {        if ($request->wantsJson()) {            return new JsonResponse(['message' => trans($response)], 200);        }        return redirect($this->redirectPath())                            ->with('status', trans($response));    }    /**     * Get the response for a failed password reset.     *     * @param  \Illuminate\Http\Request  $request     * @param  string  $response     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse     */    protected function sendResetFailedResponse(Request $request, $response)    {        if ($request->wantsJson()) {            throw ValidationException::withMessages([                'email' => [trans($response)],            ]);        }        return redirect()->back()                    ->withInput($request->only('email'))                    ->withErrors(['email' => trans($response)]);    }    /**     * Get the broker to be used during password reset.     *     * @return \Illuminate\Contracts\Auth\PasswordBroker     */    public function broker()    {        return Password::broker();    }    /**     * Get the guard to be used during password reset.     *     * @return \Illuminate\Contracts\Auth\StatefulGuard     */    protected function guard()    {        return Auth::guard();    }}
 |