Laravel сбросить перенаправление электронной почты - PullRequest
0 голосов
/ 30 августа 2018

В моем проекте у меня есть одна страница для обработки формы входа, формы регистрации и формы сброса пароля.

Для первых двух все работает хорошо. Наконец, я нахожу способ отправлять свою собственную электронную почту вместо электронной почты laravel по умолчанию, но теперь я хочу прекратить перенаправление в случае успеха.

Что касается истории, я запускаю уведомление о подсластке, когда нажимаю на кнопку Отправить, вызываю контроллер сброса с помощью Ajax и жду ответа.

Но вместо этого страница перезагружается при успехе. Я не нахожу способ предотвратить перенаправление и просто отправить JSON на мой Ajax.

Мой логин.js:

$(".m_login_forget_password_submit").click(function(l){

    var t=$(this),r=$(this).closest("form");
    t.addClass("m-loader m-loader--right m-loader--light");

    swal({
        title:"Mot de passe",
        text:"Génération du lien.",
        type:"info"
    });
        var $this = $(this);
        $.ajax({
            type: 'POST',
            url: 'password/request',
            data: $this.serializeArray(),
            success:function(data){
                $("#m_login_signup_submit").toggleClass("m-loader m-loader--right m-loader--light");
                swal({
                    title:"Succès",
                    text:"Votre demande de compte a été transmise à nos équipe.",
                    type:"success"
                });

            },
            error: function(data){
                $("#m_login_signup_submit").toggleClass("m-loader m-loader--right m-loader--light");
                if( data.status === 422 ) {
                    var error = "Les erreurs suivantes ont été trouvées :";
                    var errors = data.responseJSON;
                    $.each( errors, function( key, value ) {
                        error += '<br>&#9656 ' + value[0];
                    });
                    swal("Erreur",error,"error")
                }
            }
        });

Мой пользовательский ResetPasswordController:

class ResetPasswordController extends Controller

{

use ResetsPasswords;

/**
 * Where to redirect users after resetting their password.
 *
 * @var string
 */
protected $redirectTo = '/home';

/**
 * Create a new controller instance.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('guest');
}

/**
 * Get the response for a successful password reset.
 *
 * @param  string  $response
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Http\JsonResponse
 */
protected function sendResetResponse($response)
{
    return 'ok';
}


    }

Кто-то знает, как предотвратить перенаправление при успешной отправке пароля для сброса пароля и вместо этого отправить json?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 30 августа 2018

При сбросе пароля в вашем ResetPasswordController будет вызываться функция reset, поэтому вам придется переименовать вашу sendResetResponse функцию в reset (поскольку вы хотите переопределить функцию черты) и указать функция черты по умолчанию для неиспользуемой функции. Кроме того, если вы хотите получить ответ в формате JSON, вам необходимо указать его в ответе.

Пример:

class ResetPasswordController extends Controller
{
    use ResetsPasswords {
        reset as unused;
    }

    ...

    //Override the trait function
    public function reset(Request $request) {
        //Call default validation and handle password change

        $this->validate($request, $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);
            }
        );

        //Return the response
        if ($response == Password::PASSWORD_RESET) {
            return response()->json(array(
                'result' => 'ok',
            ), 200);
        } else {
            return response()->json(array(
                'result' => 'fail',
            ), 500);
        }
    }
}

Edit:

Извините, подумал, что вы говорили о перенаправлении сброса пароля. Чтобы обработать перенаправление после отправки электронного письма, вы воспользуетесь аналогичным подходом, измените свой ForgotPasswordController и переопределите вместо него функцию sendResetLinkEmail:

class ForgotPasswordController extends Controller
{
    use SendsPasswordResetEmails {
        sendResetLinkEmail as unused;
    }

    ...

    public function sendResetLinkEmail(Request $request)
    {
        $this->validateEmail($request);

        $response = $this->broker()->sendResetLink(
            $request->only('email')
        );

        //Return the response
        if ($response == Password::RESET_LINK_SENT) {
            return response()->json(array(
                'result' => 'ok',
            ), 200);
        } else {
            return response()->json(array(
                'result' => 'fail',
            ), 500);
    }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...