{"id":20756434,"url":"https://github.com/lirongtong/miitvip-captcha","last_synced_at":"2026-01-17T14:56:15.974Z","repository":{"id":43603653,"uuid":"324893060","full_name":"lirongtong/miitvip-captcha","owner":"lirongtong","description":":sparkling_heart: 基于 Vue3.x + Vite4.x + Canvas 开发的滑块验证码 :sparkling_heart: 动态生成验证滑块，结合后端的二次校验，能有效的避免被其他人肆意抓取并模拟验证，进一步提升验证码的的可靠性 :collision: 且能满足大部分用户的不同定制化需求，譬如自定义背景图 / 定制主题色等等 :fire: :fire:","archived":false,"fork":false,"pushed_at":"2025-07-08T02:55:13.000Z","size":580,"stargazers_count":172,"open_issues_count":7,"forks_count":31,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-09-30T01:51:42.806Z","etag":null,"topics":["canvas","captcha","component","makeit","makeit-admin-pro","makeit-captcha","makeit-component","miitvip","vite","vue-component","vue3"],"latest_commit_sha":null,"homepage":"https://admin.makeit.vip/components/captcha","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lirongtong.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-28T02:30:29.000Z","updated_at":"2025-08-24T14:46:04.000Z","dependencies_parsed_at":"2024-06-19T02:45:40.774Z","dependency_job_id":"ea0eb080-dfcd-4c4a-954a-a2004de44d49","html_url":"https://github.com/lirongtong/miitvip-captcha","commit_stats":{"total_commits":86,"total_committers":2,"mean_commits":43.0,"dds":0.03488372093023251,"last_synced_commit":"3d783b918df681c7fba883127eed48be66738cfd"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/lirongtong/miitvip-captcha","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lirongtong%2Fmiitvip-captcha","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lirongtong%2Fmiitvip-captcha/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lirongtong%2Fmiitvip-captcha/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lirongtong%2Fmiitvip-captcha/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lirongtong","download_url":"https://codeload.github.com/lirongtong/miitvip-captcha/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lirongtong%2Fmiitvip-captcha/sbom","scorecard":{"id":592325,"data":{"date":"2025-08-11","repo":{"name":"github.com/lirongtong/miitvip-captcha","commit":"3658f29e090de0594222a908bcae7628c6da10ed"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":5,"reason":"6 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":7,"reason":"3 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-x8qp-wqqm-57ph","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T22:16:26.603Z","repository_id":43603653,"created_at":"2025-08-20T22:16:26.603Z","updated_at":"2025-08-20T22:16:26.603Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28510926,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T13:38:16.342Z","status":"ssl_error","status_checked_at":"2026-01-17T13:37:44.060Z","response_time":85,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["canvas","captcha","component","makeit","makeit-admin-pro","makeit-captcha","makeit-component","miitvip","vite","vue-component","vue3"],"created_at":"2024-11-17T09:32:19.718Z","updated_at":"2026-01-17T14:56:15.959Z","avatar_url":"https://github.com/lirongtong.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://admin.makeit.vip/\"\u003e\n        \u003cimg width=\"200\" src=\"https://file.makeit.vip/MIITVIP/M00/00/00/K4vDRGPcbmmAG8_sAAAtlj6Tt_s562.png\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\" color=\"green\"\u003e\n    \u003ca href=\"https://admin.makeit.vip/components/captcha\" target=\"_blank\" style=\"color: #41b995\"\u003e\n        Makeit Captcha\n    \u003c/a\u003e\n\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n基于 Vue3.x + Vite6.x 开发，动态生成验证滑块的验证码组件\n\n[![npm package](https://img.shields.io/npm/v/@miitvip/captcha.svg?style=flat-square)](https://www.npmjs.org/package/@miitvip/captcha)\n[![npm_downloads](http://img.shields.io/npm/dm/@miitvip/captcha.svg?style=flat-square)](http://www.npmtrends.com/@miitvip/captcha)\n![MIT](https://img.shields.io/badge/license-MIT-ff69b4.svg)\n![node](https://img.shields.io/badge/node-22.17.0-orange.svg)\n![vue](https://img.shields.io/badge/vue-3.5.17-green.svg)\n![vite](https://img.shields.io/badge/vite-6.3.5-yellow.svg)\n![axios](https://img.shields.io/badge/axios-1.10.0-red.svg)\n![ant design vue](https://img.shields.io/badge/ant%20design%20vue-4.x-blueviolet.svg)\n\n\u003c/div\u003e\n\n## 关于\n\n\u003e Makeit Captcha 滑块验证码组件，基于 Vue3.x + Vite6.x + Canvas 开发，动态生成验证滑块，结合后端进行二次校验，能有效避免被恶意抓取后的模拟验证，进一步提升验证码的可靠性。\n\n:white_check_mark: 自定义主题配色 :evergreen_tree:\n\n:white_check_mark: 自定义初始化验证码 :sparkling_heart:\n\n:white_check_mark: 自定义远程校验结果 :collision:\n\n:white_check_mark: 动态配置验证码弹窗背景图 :hibiscus:\n\n## 安装\n\n```bash\nnpm i @miitvip/captcha\n```\n\n## 使用\n\n```ts\nimport { createApp } from 'vue'\nimport MakeitCaptcha from '@miitvip/captcha'\nimport '@miitvip/captcha/dist/makeit-captcha.min.css'\nimport App from './app.vue'\n\nconst app = createApp(App)\napp.use(MakeitCaptcha)\napp.mount('#app')\n```\n\n## 国际化（本身项目包含 vue-i18n）\n\n```ts\n/**\n * 如果项目本身有引入 vue-i18n，请导出 setupCaptchaI18n，\n * 且在 captcha 组件 install 之前调用。\n * 避免 vue-i18n 冲突（多次实例化）\n * 如下示例：\n */\nimport { createApp } from 'vue'\nimport MakeitCaptcha, { setupCaptchaI18n } from '@miitvip/captcha'\nimport '@miitvip/captcha/dist/makeit-captcha.min.css'\nimport App from './app.vue'\n\nconst app = createApp(App)\nconst i18n = createI18n({\n    legacy: false,\n    locale: 'zh-cn',\n    messages: {}\n})\nsetupCaptchaI18n(i18n)\napp.use(MakeitCaptcha)\napp.mount('#app')\n```\n\n## 示例\n\n```html\n\u003c!-- 自定义初始化 / 校验等 --\u003e\n\u003ctemplate\u003e\n    \u003cdiv class=\"mi-captchas\"\u003e\n        \u003c!-- 基础效果 --\u003e\n        \u003cmi-captcha ref=\"captcha\" /\u003e\n\n        \u003c!-- 手动触发重置 --\u003e\n        \u003ca @click=\"reset\"\u003e重置\u003c/a\u003e\n\n        \u003c!-- 自定义主题色 ( 颜色值  ) --\u003e\n        \u003cmi-captcha primary-color=\"#2F9688\" /\u003e\n\n        \u003c!-- 自定义初始化 / 校验等 --\u003e\n        \u003cmi-captcha\n            theme-color=\"#be6be0\"\n            init-action=\"v1/captcha/init\"\n            @init=\"initAfter\"\n            verify-action=\"v1/captcha/verification\"\n            :verify-params=\"params.verify\"\n        /\u003e\n    \u003c/div\u003e\n\u003c/template\u003e\n\n\u003cscript setup\u003e\n    import { ref, reactive } from 'vue'\n\n    const captcha = ref(null)\n\n    const params = reactive({\n        verify: { key: null }\n    })\n\n    const initAfter = (res) =\u003e {\n        if (res?.ret?.code === 200) {\n            localStorage.setItem('mi-captcha-key', res?.data?.key)\n            params.verify.key = res?.data?.key\n        }\n    }\n\n    const reset = () =\u003e {\n        console.log('reinitialize')\n        captcha.value?.reset(false)\n    }\n\u003c/script\u003e\n```\n\n## 更多\n\n\u003e 更多定制化内容及使用请查看在线示例：[https://admin.makeit.vip/component/captcha](https://admin.makeit.vip/component/captcha)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flirongtong%2Fmiitvip-captcha","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flirongtong%2Fmiitvip-captcha","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flirongtong%2Fmiitvip-captcha/lists"}