我正在使用 ajax 发送电子邮件,所以我的问题是如果我没有
{!! csrf_field() !!}
在视图中,我将收到令牌不匹配错误。如果我在视图中添加输入隐藏令牌,我将收到此错误
Swift_RfcComplianceException邮箱头中.php第 348 行:地址 给定的邮箱 [] 不符合 RFC 2822、3.6.2。
我该如何解决它。感谢您的帮助。
这是视图
<form action="{{ url('/findpass')}}" method="POST" id="forgotpassForm">
{!! csrf_field() !!}
<div class="form-group">
<input class="form-control input-lg" placeholder="E-mail" name="emailForgot" type="email" id="emailForgot" required>
</div>
<input type="submit" class="btn btn-lg btn-primary btn-block" id="forgotpassBtn" value="Send email">
</form>
阿贾克斯
$(document).ready(function() {
$('#forgotpassBtn').click(function() {
event.preventDefault();
var email=$("#emailForgot").val();
var _token = $("input[name='_token']").val();
$.ajax({
url: '/findpass',
type: 'POST',
data:{
email:email,
_token : _token
},
success:function(data) {
alert(data.mess);
$("#forgotpass")[0].reset();
},
error:function() {
alert("Error");
}
});
});
});
控制器
public function resetPass()
{
$emailForgot=Input::get('emailForgot');
$user= User::where('email', '=' , $emailForgot)->first();
$data=['username'=>$user -> username,'email'=>$user -> email,'token'=>$user -> remember_token];
Mail::send('ui.mail.reset',$data, function ($m) use ($user) {
$m->from('ngohungphuc95@gmail.com', 'Reset password');
$m->to($user->email, $user->full_name)->subject('Email reset password');
});
return response()->json(array('mess'=>'Mail send'));
}
不带blade
csrf
,并自行添加id
。通过使用jquery
id
获取csrf
值的值。这是您可以执行此操作的方法。
将{!! csrf_field() !!}
更改为:
<input type="hidden" name="_token" value="{{ csrf_token() }}" id="token"/>
并更改这行 ajax 代码:
var _token = $("input[name='_token']").val();
自:
var _token = $('#token').val();
可能这不是最好的方法。但是我用这个程序解决了我的问题。
您还可以像这样向所有 ajax 调用添加全局 csrf 令牌
$(document).ready(function(){
$.ajaxSetup({
headers: { 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },
});
});
然后只需覆盖 VerifyCsrfToken 令牌的 tokensMatch() 方法即可查找 ajax 标头
protected function tokensMatch($request)
{
// If request is an ajax request, then check to see if token matches token provider in
// the header. This way, we can use CSRF protection in ajax requests also.
$token = $request->ajax() ? $request->header('X-CSRF-Token') : $request->input('_token');
return $request->session()->token() == $token;
}
在此之后,您的所有 ajax 调用将自动通过 csrf 检查并且是安全的。
Swift_RfcComplianceException MailboxHead 中.php第 348 行:给定的邮箱 [] 中的地址不符合 RFC 2822、3.6.2。
上述错误是因为您尚未在 config/mail.php
中配置发件人地址。默认情况下,它设置为 null,但应为有效的电子邮件地址:
'from' => ['address' => 'user@example.com', 'name' => null],