1

http://keith-wood.name/realPerson.html jquery プラグイン を使用してキャプチャ ディレクティブを作成しようとしています。

私はangularjsに比較的慣れていないため、これを行う方法が見つからないようです。基本的に、人間が自分のアカウントにサインアップしていることを確認するためのキャプチャが必要です。element.realperson() を呼び出すと、サーバー側で入力された入力と比較する必要があるハッシュ値を含む非表示の入力フィールドが生成されます。

したがって、この非常に基本的で不完全なディレクティブを呼び出すと、newUser.captchaInput モデルが入力フォームにバインドされますが、隠しフィールドの値 $('#captcha_hash') を取得する方法が一生わかりません。 .val() フォームデータに何らかの形で含めます。理想的には newUser.captchaHash として。

angular.module('vah').directive("captcha", ->
  restrict: "A"
  require: '?ngModel'
  link: (scope, element, attrs, ngModel) ->
    return if !ngModel

    optionsObj = {
      length: 5
    }

  element.realperson(optionsObj)

  # need to bind $('#captcha_hash').val() to a newUser.captchaHash model, or 
  add the model to that generated input field.

)

<input captcha id="defaultReal" ng-model="newUser.captchaInput">

これには簡単な解決策があると確信しており、助けていただければ幸いです。

4

2 に答える 2

1

reCaptcha が好きなら、VividCortex/angular-recaptchaを試してみてください。

于 2013-06-13T18:38:30.687 に答える
0

作業コード。別のプログラミング フォーラムの誰かの助けに感謝します。それは間違いなく理想的ではありません。私は多くのことを学ぶ必要がありますが、これはうまくいきます。

angular.module('vah').directive("captcha", ($timeout, $parse) ->
  restrict: "A"
  require: '?ngModel'
  link: (scope, element, attrs, ngModel) ->
    return if !ngModel

    optionsObj = {
      length: 5
    }

    $timeout(->
      attrs.foo = $('#captcha_hash')
      hashSet = $parse(attrs.ngModel).assign
      scope.$watch(attrs.foo.val(), (newVal) ->
        hashSet(scope, newVal)
      )
    , 300)
    element.realperson(optionsObj)

)

また、この特定のキャプチャをハッシュするための ruby​​ コードも含めます。これは、Bignum と ruby​​ で javascript や PHP/Java の例と比べて問題が発生したためです。

module CaptchaHashing
  module ClassMethods
    def rp_hash(value)
      hash_value = 5381
      value = value.upcase
      value.chars.each do |c|
        hash_value = ((left_shift_32(hash_value, 5)) + hash_value) + c.ord
        puts hash_value
      end
      hash_value
    end

    def left_shift_32 x, shift_amount
      shift_amount &= 0x1F
      x <<= shift_amount
      x &= 0xFFFFFFFF 

      if (x & (1<<31)).zero?
       x
      else
       x - 2**32
      end
    end

  end

  def self.included(receiver)
    receiver.extend ClassMethods
  end
end

def self.valid_captcha?(captcha_hash, captcha_input)
    if captcha_hash.present? && captcha_input.present?
      rp_hash(captcha_input) == captcha_hash
    else
      false
    end
  end

幸運を!

于 2013-05-11T13:57:35.170 に答える