【问题标题】:Laravel 5 missmatch token in sending emailLaravel 5 发送电子邮件中的不匹配令牌
【发布时间】:2016-05-03 07:54:38
【问题描述】:

我正在使用 ajax 发送电子邮件,所以我的问题是如果我没有

{!! csrf_field() !!}

在视图中我会得到令牌不匹配错误。如果我在视图中添加输入隐藏令牌我会得到这个错误

MailboxHeader.php 第 348 行中的 Swift_RfcComplianceException:地址位于 邮箱给定 [] 不符合 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'));
    }

【问题讨论】:

    标签: ajax laravel laravel-5 sendmail


    【解决方案1】:

    在没有blade 的情况下添加csrf,并自己添加id。通过id 使用jquery 获取csrf 的值。以下是您可以执行此操作的方法。

    {!! csrf_field() !!} 更改为:

    <input type="hidden" name="_token" value="{{ csrf_token() }}" id="token"/>
    

    并更改这行ajax代码:

    var _token = $("input[name='_token']").val();
    

    收件人:

    var _token = $('#token').val();
    

    可能这不是最好的方法。但我用这个程序解决了我的问题。

    【讨论】:

      【解决方案2】:

      您还可以像这样向所有 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 检查并且是安全的。

      【讨论】:

        【解决方案3】:

        MailboxHeader.php 第 348 行中的 Swift_RfcComplianceException:给定邮箱中的地址 [] 不符合 RFC 2822, 3.6.2。

        上述错误是因为您没有在config/mail.php 中配置发件人地址。默认设置为 null,但应该是有效的电子邮件地址:

        'from' => ['address' => 'user@example.com', 'name' => null],
        

        【讨论】:

          猜你喜欢
          • 2015-10-01
          • 1970-01-01
          • 2016-09-20
          • 2017-03-07
          • 1970-01-01
          • 2016-10-15
          • 1970-01-01
          • 2022-08-13
          • 2018-09-14
          相关资源
          最近更新 更多