Laravel 5 发送电子邮件中的不匹配令牌



我正在使用 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],

最新更新