1. makeit-captcha

makeit-captcha

Makeit Captcha

基于 Vue3.x + Vite4.x 开发,动态生成验证滑块的验证码组件

npm package
npm_downloads
MIT
webpack
vue
vite
axios
ant design vue

关于

Makeit Captcha 2.x 滑块验证码组件,基于 Vue3.x + Vite4.x + Canvas 开发,动态生成验证滑块,结合后端进行二次校验,能有效避免被恶意抓取后的模拟验证,进一步提升验证码的可靠性。

:white_check_mark: 自定义主题配色 :evergreen_tree:

:white_check_mark: 自定义初始化验证码 :sparkling_heart:

:white_check_mark: 自定义远程校验结果 :collision:

:white_check_mark: 动态配置验证码弹窗背景图 :hibiscus:

安装

 npm i makeit-captcha

使用

 import { createApp } from 'vue'
import MakeitCaptcha from 'makeit-captcha'
import 'makeit-captcha/dist/captcha.min.css'
import App from './app.vue'

const app = createApp(App)
app.use(MakeitCaptcha)
app.mount('#app')

示例

<!-- 自定义初始化 / 校验等 -->
<template>
    <div class="mi-captchas">

        <!-- 基础效果 -->
        <mi-captcha ref="captcha" />

        <!-- 手动触发重置 -->
        <a @click="reset">重置</a>

        <!-- 自定义主题色 -->
        <mi-captcha theme-color="#2F9688"
            border-color="#2F9688"
            box-shadow-color="#2F9688" />
        
        <!-- 自定义初始化 / 校验等 -->
        <mi-captcha theme-color="#be6be0"
            init-action="v1/captcha/init"
            @init="initAfter"
            verify-action="v1/captcha/verification"
            :verify-params="params.verify" />
    </div>
</template>

<script setup>
    import { ref, reactive } from 'vue'

    const captcha = ref(null)

    const params = reactive({
        verify: { key: null }
    })
    
    const initAfter = (res) => {
        if (res?.ret?.code === 200) {
            localStorage.setItem('mi-captcha-key', res?.data?.key)
            params.verify.key = res?.data?.key
        }
    }

    const reset = () => {
        console.log('reinitialize')
        captcha.value?.reset(false)
    }
</script>

更多

更多定制化内容及使用请查看在线示例:https://admin.makeit.vip/components/captcha

Dependencies

@babel/core: ^7.18.6@babel/eslint-parser: ^7.17.0@babel/plugin-proposal-class-properties: ^7.18.6@babel/plugin-proposal-export-default-from: ^7.18.6@babel/plugin-proposal-export-namespace-from: ^7.18.6@babel/plugin-proposal-object-rest-spread: ^7.18.6@babel/plugin-proposal-optional-chaining: ^7.18.6@babel/plugin-syntax-dynamic-import: ^7.8.3@babel/plugin-transform-object-assign: ^7.18.6@babel/plugin-transform-runtime: ^7.18.6@babel/plugin-transform-typescript: ^7.18.8@babel/preset-env: ^7.18.6@babel/preset-typescript: ^7.18.6@intlify/unplugin-vue-i18n: ^0.8.1@types/node: ^18.13.0@typescript-eslint/eslint-plugin: ^5.27.0@typescript-eslint/parser: ^5.27.0@vitejs/plugin-vue: ^4.0.0@vitejs/plugin-vue-jsx: ^1.3.8@vue/babel-plugin-jsx: ^1.1.1@vue/compiler-sfc: ^3.2.47@vue/eslint-config-prettier: ^6.0.0@vue/eslint-config-typescript: ^10.0.0autoprefixer: ^10.4.7babel-loader: ^8.2.5case-sensitive-paths-webpack-plugin: ^2.4.0clean-webpack-plugin: ^4.0.0compression-webpack-plugin: ^10.0.0css-loader: ^6.7.1css-minimizer-webpack-plugin: ^4.0.0eslint: ^8.11.0eslint-config-prettier: ^8.5.0eslint-plugin-import: ^2.26.0eslint-plugin-prettier: ^3.4.1eslint-plugin-vue: ^8.5.0gulp: ^4.0.2gulp-autoprefixer: ^8.0.0gulp-babel: ^8.0.0gulp-clean-css: ^4.3.0gulp-concat: ^2.6.1gulp-less: ^5.0.0gulp-sourcemaps: ^3.0.0gulp-typescript: ^6.0.0-alpha.1html-loader: ^4.1.0less: ^4.1.2less-loader: ^10.2.0less-plugin-npm-import: ^2.1.0merge2: ^1.4.1mini-css-extract-plugin: ^2.6.1postcss: ^8.4.14postcss-loader: ^7.0.1prettier: ^2.6.2rimraf: ^3.0.2style-loader: ^3.3.1terser-webpack-plugin: ^5.3.3through2: ^4.0.2ts-loader: ^9.3.1typescript: ^4.7.2unplugin-vue-components: ^0.23.0url-loader: ^4.1.1vite: ^4.1.1vite-plugin-eslint: ^1.8.1vue-eslint-parser: ^8.3.0vue-loader: ^17.0.0vue-style-loader: ^4.1.3vue-template-compiler: ^2.6.14webpack: ^5.70.0webpack-cli: ^4.9.2webpack-merge: ^5.8.0