【问题标题】:Laravel, adding data to database after verifying ReCaptchaLaravel,验证 ReCaptcha 后将数据添加到数据库
【发布时间】:2019-08-01 06:47:33
【问题描述】:

我在我的 Laravel 项目中使用 ReCaptcha,用这个来完成 tutorial.

我需要创建一个页面,用户可以在检查验证码后发布他的消息。 我创建了一个模式对话框,用户可以在其中填写这样的数据:

<form class="form-horizontal" action="" method="post">
              <div class="form-group error">
                <label for="messageName" class="col-sm-3 control-label">Name</label>
                <div class="col-sm-9">
                  <input type="text" class="form-control has-error" id="name" name="name" placeholder="Your name" value="" 
                  ng-model="message.name" ng-required="true">
                  <span class="help-inline" 
                  ng-show="GBM.text.$invalid && GBM.text.$touched">Required</span>
                </div>
              </div>
              <div class="form-group error">
                <label for="messageEmail" class="col-sm-3 control-label">Email</label>
                <div class="col-sm-9">
                  <input type="email" class="form-control has-error" id="email" name="email" placeholder="E-mail" value="" 
                  ng-model="message.email" ng-required="true">
                  <span class="help-inline" 
                  ng-show="GBM.email.$invalid && GBM.email.$touched">Required</span>
                </div>
              </div>
              <div class="form-group error">
                <label for="messageLink" class="col-sm-3 control-label">Web</label>
                <div class="col-sm-9">
                  <input class="form-control" rows="3" class="form-control has-error" id="web" name="web" placeholder="Link for your web" value="" ng-model="message.web" ng-required="false" >
                </div>                    
              </div>

              <div class="form-group error">
                <label for="messageText" class="col-sm-3 control-label">Comment</label>
                <div class="col-sm-9">
                  <textarea class="form-control" rows="3" class="form-control has-error" id="comment" name="comment" placeholder="Your comment" value="" ng-model="message.text" ng-required="true" ></textarea> 
                  <span class="help-inline" 
                  ng-show="GBM.text.$invalid && GBM.text.$touched">Required</span>
                </div>                    
              </div>

                {!! csrf_field() !!}
                <!-- recaptcha -->
                {{Request::is('contactd')}}
                <div class="form-group">

                    <div class="col-md-9">
                        <div class="g-recaptcha" data-sitekey="{{env('GOOGLE_RECAPTCHA_KEY')}}"></div>
                    </div>
                </div>
                <!-- Button -->
                <div class="form-group">
                    <label class="col-md-9 control-label"></label>
                    <div class="col-md-9">
                        <button type="submit" name="send" class="btn btn-primary btn-lg btn-block">Add new message <span class="fa fa-paper-plane-o"></span></button>
                    </div>
                </div>
            </form>

对于我得到的路线是这样的:Route::post('contact','ContactController@store');

这就是问题所在,在我的控制器中,我得到了这段代码来验证验证码:

public function store(ReCaptchataTestFormRequest $request){
return "Captcha done right! ";}

这段代码将数据保存到数据库

    public function store(Request $request)
{
    $this->validate($request, [ 'name' => 'required|max:255' ]);
    $this->validate($request, [ 'email' => 'required | email' ]);
    $this->validate($request, [ 'comment' => 'required' ]);

    $ip = $_SERVER['REMOTE_ADDR'];
    $browser = $_SERVER['HTTP_USER_AGENT'];

    $guestbook = Guest_books::create([
        'name' => $request->input('name'),
        'email' => $request->input('email'),
        'web' => $request->input('web'),
        'comment' => $request->input('comment'),
        'ip' => $ip,
        'browser' => $browser
    ]);

    return $guestbook;
}

所以问题是:在Controller中为项目编写什么来验证Captcha然后将其发布到数据库?

【问题讨论】:

    标签: laravel recaptcha


    【解决方案1】:

    您学习的教程将教您如何创建一个custom validation rule,然后您可以在验证请求时使用它,可以通过Form Request 或直接通过in your controller

    您在控制器中犯的错误是您已多次调用validate,而是应该将包含所有规则的数组传递给它,包括您的recaptcha 规则,例如:

    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|max:255',
            'email' => 'required|email',
            'comment' => 'required',
            'g-recaptcha-response' => 'required|recaptcha',
        ]);
    
        // ...
    }
    

    此外,您应注意store 方法应始终返回重定向。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2020-01-27
      相关资源
      最近更新 更多