Php 如何在laravel内置重置密码中考虑软删除

Php 如何在laravel内置重置密码中考虑软删除,php,laravel,Php,Laravel,我想在laravel5.4内置重置密码中应用软删除。由于软删除的重复电子邮件,已删除的电子邮件密码已更改,但不正确。我坚持认为应用删除应该为空,而不是只检查电子邮件。这就是为什么它会获取删除的记录而不是正确的记录。下面给出了我的重置密码控制器。请检查我的重置控制器并建议任何解决方案 class ResetPasswordController extends Controller { use ResetsPasswords; protected $redirectTo = 'me

我想在laravel5.4内置重置密码中应用软删除。由于软删除的重复电子邮件,已删除的电子邮件密码已更改,但不正确。我坚持认为应用删除应该为空,而不是只检查电子邮件。这就是为什么它会获取删除的记录而不是正确的记录。下面给出了我的重置密码控制器。请检查我的重置控制器并建议任何解决方案

class ResetPasswordController extends Controller
{
    use ResetsPasswords;

    protected $redirectTo = 'member/welcome';

    public function showResetForm(Request $request, $token = null)
    {
        return view('frontend.member.auth.passwords.reset')->with(
            ['token' => $token, 'email' => $request->email]
        );
    }
    
    public function reset(Request $request)
    {
        $this->validate($request, $this->rules(), $this->validationErrorMessages());
        $response = $this->broker()->reset(
            $this->credentials($request), function ($user, $password) {
                $this->resetPassword($user, $password);
            }
        );

        return $response == Password::PASSWORD_RESET
                    ? $this->sendResetResponse($response)
                    : $this->sendResetFailedResponse($request, $response);
    }

    protected function rules()
    {
        return [
            'token' => 'required',
            'email' => 'required|email',
            'password' => 'required|confirmed|min:8|regex:/^.*(?=.{3,})(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[\d\x])(?=.*[@!$#%^*()-_]).*$/',
        ];
    }
    /**
     * Get the password reset validation error messages.
     *
     * @return array
     */
    protected function validationErrorMessages()
    {
        return [
            'password.regex' => 'The password must contain at least one uppercase, one lowercase, one number and one special(@!$#%...) character.'
                ];
    }

    protected function resetPassword($user, $password)
    {
        $password = app('hash')->needsRehash($password) ? Hash::make($password) : $password;

        $user->forceFill([
            'password' => $password,
            'remember_token' => Str::random(60),
        ])->save();

        $this->guard()->login($user);
    }

    
    public function broker()
    {
        return Password::broker('members');
    }

    protected function guard()
    {
        return Auth::guard('web_member');
    }
}

请提前帮助,谢谢。我是新加入laravel的。请帮助。

只需将正确的用户传递给resetPassword()函数,如

public function reset(Request $request)
{
    $this->validate($request, $this->rules(), $this->validationErrorMessages());
    $response = $this->broker()->reset(
        $this->credentials($request), function ($user, $password) {
            $user = User::where('email', $user->email)->whereNull('deleted_at')->first();
            $this->resetPassword($user, $password);
        }
    );

    return $response == Password::PASSWORD_RESET
                ? $this->sendResetResponse($response)
                : $this->sendResetFailedResponse($request, $response);
}

一个可能的解决方案是在resetPassword函数中获取正确的用户并替换该用户。