programing

vuejs 구성 요소의 사용자 php captcha

randomtip 2022. 7. 10. 19:20
반응형

vuejs 구성 요소의 사용자 php captcha

Larabel 5.4.20 및 VueJs에서modal 컴포넌트에 심플한 코드 captcha를 사용하고 싶다(reCaptcha를 사용하고 싶지 않다).이거 어떻게 해?

Mewebstudio Captcha를 이렇게 사용하고 있습니다.

Route::any('captcha-test', function()
{
    if (Request::getMethod() == 'POST')
    {
        $rules = ['captcha' => 'required|captcha'];
        $validator = Validator::make(Input::all(), $rules);
        if ($validator->fails())
        {
            echo '<p style="color: #ff0000;">Incorrect!</p>';
        }
        else
        {
            echo '<p style="color: #00ff30;">Matched :)</p>';
        }
    }

    $form = '<form method="post" action="captcha-test">';
    $form .= '<input type="hidden" name="_token" value="' . csrf_token() . '">';
    $form .= '<p>' . captcha_img() . '</p>';
    $form .= '<p><input type="text" name="captcha"></p>';
    $form .= '<p><button type="submit" name="check">Check</button></p>';
    $form .= '</form>';
    return $form;
});

다만, PHP 문서에서는 동작합니다(Vue 컴포넌트에 필요합니다).

이를 실현하기 위해route다음과 같습니다.

Route::post('captcha-test', function() {
    $validator = Validator::make(Input::all(), [
        'captcha' => 'required|captcha'
    ])->validate();

    return response(['status' => 'ok'], 200);
});

Vue 컴포넌트는 다음과 같습니다.

Vue.component('captcha', {
  props: ['image'],
  
  data: function () {
    return {
      form: {
        captcha: null
      },
      isWorking: false
    }
  },
  
  methods: {
    check: function () {
      var self = this
      self.isWorking = true
      
      axios.post('/captcha-test', {
        captcha: self.form.captcha
      })
      .then(function (response) {
        // valid captcha...
        console.log(response);
        
        // reset the form
        self.form.captcha = null
        // now, is not working
        self.isWorking = false
      })
      .catch(function (err) {
        // invalid captch..
        console.log(err);
        
        // reset the form
        self.form.captcha = null
        // now, is not working
        self.isWorking = false
      });
    }
  }
});

new Vue({
  el: '#app'
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.16.2/axios.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.2/vue.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.5.1/css/bulma.css" rel="stylesheet"/>


<div id="app" class="section">

  <captcha image="<img src='https://c22blog.files.wordpress.com/2010/10/input-black.gif' style='width: 150px;'>" inline-template>
    <div class="box">
      <div v-html="image"></div>

      <form @submit.prevent="check">
        <div class="field">
          <div class="control">
            <input class="input" type="text" placeholder="Captcha" v-model="form.captcha" required>
          </div>
        </div>

        <div class="field">
          <div class="control">
            <button type="submit" class="button is-primary" :class="{'is-loading': isWorking}" :disabled="isWorking">Check</button>
          </div>
        </div>
      </form>
    </div>
  </captcha>
  
</div>

언급URL : https://stackoverflow.com/questions/45759425/user-php-captcha-in-vuejs-component

반응형