在Laravel中进行Ajax验证后的电子邮件确认问题

时间:2020-08-23 23:24:13

标签: php laravel laravel-7

我正在使用Laravel 7.4和PHP 7.4。

我有一个Laravel默认注册表格。提交后,它将验证电子邮件发送给用户以完成注册过程。验证后,用户可以访问仪表板页面。现在,我想使用ajax应用验证并从RegisterController获得JSON响应。我只是写了一个 postRegister 函数来处理验证。

问题:

我的验证有效,但只有问题在注册后,用户可以访问仪表板页面而无需电子邮件确认。如果我删除验证功能,现在用户只能在确认电子邮件后访问仪表板。

  1. 我想验证我的表单,但不绕过电子邮件确认步骤。
  2. 提交后,我将如何将用户重定向到验证电子邮件页面。

什么是最好的方法?

刀片

<form name="register_name" id="register_forms">
    <input  name="register_name" type="text" />
    ..............
    <input id="my-register" type="submit" value="Continue">
</form>

JavaScript

    $("#my-register").click(function(e){
/**Ajax code**/
         e.preventDefault();
       $.ajaxSetup({
           headers: {
               'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
           }
       });
        $.ajax({
    type: "post",
    url: "{{ route('register') }}",
     data: $('#register_forms').serialize(),
     dataType: 'json',
    success: function(data){
        $('#success_message').fadeIn().html(data.message);
        }
    },
    error: function (err) {
        if (err.status == 422) { 
            $('#success_message').fadeIn().html(err.responseJSON.message);

            // display errors on each form field
            $.each(err.responseJSON.errors, function (i, error) {
                var el = $(document).find('[name="'+i+'"]');
                el.after($('<span style="color: #ff0000;">'+error[0]+'</span>'));
            });
        }
    }
});
/**Ajax code ends**/
    });

RegisterController

protected function validator(array $data)
{
    $validator = Validator::make($data, [
        'register_email' => ['required', 'string', 'email', 'max:255', 'unique:users,email'],

    ]);
    $validator->setAttributeNames([
        'register_email' => 'email',
    ]);

    return $validator;
}

protected function create(array $data)
{
  $user = User::create([
      'email' => $data['register_email'],
  ]);

  $user->sendEmailVerificationNotification();

  return $user;
}

public function postRegister(Request $request)
{
    $validator = $this->registrar->validator($request->all());

    if ($validator->fails()) {
        return view('auth/register')->withErrors($validator->errors());
    }
}

路线

Route::get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard')->middleware('verified');

0 个答案:

没有答案