【问题标题】:Auth validation in AJAX Laravel 5.2AJAX Laravel 5.2 中的身份验证验证
【发布时间】:2016-08-05 01:59:27
【问题描述】:

我对 Laravel 中的 AJAX 有点困惑。我在 Laravel 和 OOP 和 OOP 框架中很新,我不知道如何执行 AJAX 请求。我在网上阅读了几个教程,但都不同,而且看起来很复杂。

我安装了 Laravel 5.2,我使用 php artisan make:auth 设置了身份验证,我将注册表单从 /register 移动到了 /

我为必填字段制作了一个小的 jQuery sn-p,但我想对每个字段(姓名、电子邮件、密码、密码确认)进行 AJAX 验证。 Laravel 提供了验证规则,我想重用它们。

我不知道该怎么做...

它是如何工作的?一个具体的例子会很好,可以帮助我理解。

谢谢

【问题讨论】:

    标签: php ajax laravel laravel-5.2


    【解决方案1】:

    您可以使用 Laravel 验证器来检查必填字段。 但是这个验证只能在后端使用,不能在前端使用。

    例如:

    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ]);
    
        if ($validator->fails()) {
            return response()->json($validator->messages(), 500);
        }
    }
    

    你在 laravel 文档中有一个类似的例子: https://laravel.com/docs/5.2/validation

    【讨论】:

      【解决方案2】:

      制作你的路由/validate,在routes.php文件中设置你的控制器,然后你可以将数据发送到控制器中的函数:

      public function validate(Request $request)
      {
          $data = $request->json()->all();
      
          $validator = Validator::make($data, [
              'name' => 'required|max:50',
              'email' => 'required|email|unique:users',
              'password' => 'required|min:6|confirmed',
              'password_confirmation' => 'required' 
          ]);
      
          if ($validator->fails()) {
              return response()->json($validator->messages(), 500);
          }else{
              return response()->json(['result' => 'OK'], 200);
          }
      
      }
      

      您可以使用 JQuery 在客户端发送数据:

      $.ajax({
          url: ROOT_URL+'/validate',
          method: 'POST',
          data: data_collected
      }).then(function(){
          alert('Everything OK');
          //Do your stuff
      }, function(data){
          //showing errors
          alert(data);    
      });
      

      如果你发送的密码没有加密,强烈建议你有SSL证书通过https协议发送信息,如果没有,请确保数据发送安全。

      参考: jQuery,sending password via ajax?

      【讨论】:

        【解决方案3】:

        不要忘记 csrf 令牌。

        它是你的头部元数据;

        <meta name="_token" content="{!! csrf_token() !!}"/>
        

        它是你所有的 ajax 请求,

            $.ajaxSetup({
                headers: {
                    'X-CSRF-TOKEN': $('meta[name="_token"]').attr('content')
                }
            });
        

        另一种选择

        class VerifyCsrfToken extends BaseVerifier
        {
            /**
             * The URIs that should be excluded from CSRF verification.
             *
             * @var array
             */
            protected $except = [
                'news/', 'users/' // a.com/news/1
            ];
        }
        

        【讨论】:

          【解决方案4】:

          出于安全原因,Laravel 提供 CSRF 令牌。

          如果你想在 laravel 中使用 AJAX,你必须通过数据传递 CSRF 令牌。 如果不提供 CSRF Token 调用 AJAX 会抛出 CSRF Token mismatch Exception。

          您应该阅读以下内容: https://laravel.com/docs/master/routing#csrf-protection

          【讨论】:

            猜你喜欢
            • 2016-07-09
            • 2018-11-22
            • 1970-01-01
            • 1970-01-01
            • 2017-02-26
            • 1970-01-01
            • 2017-07-03
            • 2016-04-18
            • 2016-04-08
            相关资源
            最近更新 更多