emotionloop/visualcaptcha

PHP库,用于visualCaptcha。仍然需要您拥有前端伴侣。

0.0.8 2017-03-09 11:08 UTC

This package is not auto-updated.

Last update: 2024-09-14 15:11:15 UTC


README

Build Status Codacy Code Climate

visualCaptcha-packagist

visualCaptcha后端服务的Packagist composer包

使用Composer安装

您需要安装PHP和composer

composer install emotionloop/visualcaptcha

运行测试

您需要安装PHPUnit并运行以下命令

composer install && phpunit tests

使用方法

初始化

您需要初始化一个session以供visualCaptcha注入所需的数据。您将需要这个变量来启动和验证visualCaptcha。

session_start();// Only needed once, at the beginning of your PHP files.
$session = new \visualCaptcha\Session( $namespace );

在哪里

  • $namespace是可选的。它是一个字符串,默认为'visualcaptcha'。如果您在同一个页面上使用多个visualCaptcha实例,则需要特别设置此变量,以便代码可以识别验证来自哪个实例。

使用缓存

您可以使用后端Zend-Cache库选项将图像存储在缓存中并避免I/O。您需要在构造函数中传递选项参数,如https://docs.zendframework.com/zend-cache/storage/adapter/中所述。默认情况下它是禁用的,您需要在构造函数的第五个参数中传递true。

$options = array(
                'adapter' => array(
                    'name'    => 'memory',
                    'options' => array('ttl' => 3600,
                        'namespace' => "captcha-service"),
                ),
                'plugins' => array( 
                    'exception_handler' => array('throw_exceptions' => false),
                ),
            );
        
$captchaWithCache = new \visualCaptcha\Captcha( $this->session,null,null,null, true,$options);

设置前端路由

您还需要为/start/:howmany/image/:index/audio/:index设置路由。这些通常看起来像

// Populates captcha data into session object
// -----------------------------------------------------------------------------
// @param howmany is required, the number of images to generate
$app->get( '/start/:howmany', function( $howMany ) use( $app ) {
    $captcha = new \visualCaptcha\Captcha( $app->session );
    $captcha->generate( $howMany );
    $app->response[ 'Content-Type' ] = 'application/json';
    echo json_encode( $captcha->getFrontEndData() );
} );

// Streams captcha images from disk
// -----------------------------------------------------------------------------
// @param index is required, the index of the image you wish to get
$app->get( '/image/:index', function( $index ) use( $app ) {
    $captcha = new \visualCaptcha\Captcha( $app->session );
    if ( ! $captcha->streamImage(
            $app->response,
            $index,
            $app->request->params( 'retina' )
    ) ) {
        $app->pass();
    }
} );

// Streams captcha audio from disk
// -----------------------------------------------------------------------------
// @param type is optional and defaults to 'mp3', but can also be 'ogg'
$app->get( '/audio(/:type)', function( $type = 'mp3' ) use( $app ) {
    $captcha = new \visualCaptcha\Captcha( $app->session );
    if ( ! $captcha->streamAudio( $app->response, $type ) ) {
        $app->pass();
    }
} );

验证图像/音频

这通常是它的样子

$session = new \visualCaptcha\Session();
$captcha = new \visualCaptcha\Captcha( $session );
$frontendData = $captcha->getFrontendData();

// If an image field name was submitted, try to validate it
if ( $imageAnswer = $app->request->params( $frontendData[ 'imageFieldName' ] ) ) {
  if ( $captcha->validateImage( $imageAnswer ) ) {
    // Image was valid.
  } else {
    // Image was submitted, but wrong.
  }
// Otherwise an audio field was submitted, so try to validate it
} else if ( $audioAnswer = $app->request->params( $frontendData[ 'audioFieldName' ] ) ) {
  if ( $captcha->validateAudio( $audioAnswer ) ) {
    // Audio answer was valid.
  } else {
    // Audio was submitted, but wrong.
  }
} else {
  // Apparently no fields were submitted, so the captcha wasn't filled.
}

visualCaptcha/Session属性

  • $namespace,String —— 这是一个私有变量,将保存每个visualCaptcha实例的命名空间。默认为'visualcaptcha'。

visualCaptcha/Session方法

  • __construct( $namespace ) —— 初始化visualCaptcha session。
  • clear() —— 将清除当前命名空间下的session。
  • get( $key ) —— 将返回session的$key对应的值。
  • set( $key, $value ) —— 为session的$key设置$value

visualCaptcha/Captcha属性

  • $session,Object —— 这个对象将引用session对象。它将有.visualCaptcha.images.visualCaptcha.audios.visualCaptcha.validImageOption.visualCaptcha.validAudioOption
  • $assetsPath,资源路径。默认情况下,它将是'./assets'
  • $imageOptions,所有图像选项。这些可以通过addImageOptions( )或replaceImageOptions( )轻松重写或扩展。默认情况下,它们使用./images.json文件填充
  • $audioOptions,所有音频选项。这些可以通过addAudioOptions( )或replaceAudioOptions( )轻松重写或扩展。默认情况下,它们使用./audios.json文件填充

visualCaptcha/Captcha方法

您可以在代码本身中找到更多文档,但这里有一个简单的参考列表。

  • __construct( $session, $assetsPath = null, $defaultImages = null, $defaultAudios = null ) —— 初始化visualCaptcha对象。
  • generate( $numberOfOptions = 5 ) —— 将在$numberOfOptions内生成一个新的有效选项。
  • streamAudio( $headers, $fileType ) —— 流音频文件。
  • streamImage( $headers, $index, $isRetina ) —— 根据session visualCaptcha images数组中的索引流图像文件。
  • getFrontendData() —— 获取前端使用的数据。
  • getValidImageOption() —— 获取当前有效的imageOption。
  • getValidAudioOption() —— 获取当前有效的audioOption。
  • validateImage( $sentOption ) —— 验证发送的图像值与有效的imageOption。
  • validateAudio( $sentOption ) —— 验证发送的音频值与有效的audioOption。
  • getImageOptions() —— 返回生成的图像选项。
  • getImageOptionAtIndex( $index ) —— 返回索引处的生成图像选项。
  • getAudioOption() —— getValidAudioOption的别名。
  • getAllImageOptions() —— 返回所有图像选项。
  • getAllAudioOptions() —— 返回所有音频选项。

许可证

查看许可证文件。