我正在使用Laravel 7.4和PHP 7.4。
我有一个Laravel默认注册表格。提交后,它将验证电子邮件发送给用户以完成注册过程。验证后,用户可以访问仪表板页面。现在,我想使用ajax应用验证并从RegisterController获得JSON响应。我只是写了一个 postRegister 函数来处理验证。
问题:
我的验证有效,但只有问题在注册后,用户可以访问仪表板页面而无需电子邮件确认。如果我删除验证功能,现在用户只能在确认电子邮件后访问仪表板。
什么是最好的方法?
刀片
<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');