使用AJAX(AngularJS)重置Laravel密码

时间:2019-03-25 09:57:35

标签: angularjs laravel laravel-5

我正在使用Laravel 5.7和angularjs构建应用程序。我想通过ajax进行授权。登录和注册可以正常工作,但是重设密码不能正确工作。问题在于没有错误或成功回调消息。我注意到我的请求走了正确的路线,但随后将我重定向到我的主页。因此,在回应中,我总是得到我的索引页。

默认情况下,laravel会引发错误“我们无法找到具有该电子邮件地址的用户”。但是,如果您将使用ajax,它将不会抛出任何内容,而且我也不知道问题出在哪里,因为登录和注册会成功引发错误。

//HTML template
<form ng-submit="auth('{{ route('password.email') }}')">
    @csrf
    <div>
        <div>Enter your e-mail</div>
        <div>We will send you an email with a link to create a new password.
        </div>
    <div ng-repeat="error in authErrors.errors">@{{error[0]}}</div>
    </div>
    <div>
        <label for="email">{{ __('E-Mail Address') }}</label>
        <input name="email" ng-model="authInfo.email" type="email" required>
    </div>
    <button type="submit" name="submit">{{ __('Send Password Reset Link') }}</button>
</form>
//JS
    $scope.authInfo = {
        name: null,
        email: null,
        password: null,
        passwordConfirmation: null,
        remember: false
    }
    $scope.authErrors = {};

    $scope.auth = function(route){
        $http({
            method: 'POST',
            url: route,
            data: $scope.authInfo
        }).then(function(response) {
            console.log($scope.authInfo);
            console.log(response);
        }, function(response) {
            console.log($scope.authInfo);
            $scope.authErrors = response.data;
            console.log(response.data)
        })
    }

所有身份验证控制器均为默认控制器。
我也在透明项目上测试了ajax,并获得了相同的结果。 如果我不发送电子邮件作为数据,它将引发错误,表明没有电子邮件。但是,如果我发送电子邮件,我将得到重定向。
我希望获得与注册和登录功能相同的结果。

有什么建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

符合预期,因为此函数在成功和失败情况下都将返回html。您要做的就是覆盖下面的功能-

public function sendResetLinkEmail(Request $request)
{

    if($request->ajax()) {

        $this->validateEmail($request);

        // We will send the password reset link to this user. Once we have attempted
        // to send the link, we will examine the response then see the message we
        // need to show to the user. Finally, we'll send out a proper response.
        $response = $this->broker()->sendResetLink(
            $request->only('email')
        );

        return $response == Password::RESET_LINK_SENT
            ? [
                'msg' => 'Successful'
            ]
            : [
                'msg' => 'Reset email sending failed.'
            ];
    }

    return [
        'msg' => 'Un-expected method calls'
    ];
}

将函数放入ForgotPasswordController