Vue集成阿里云做滑塊驗(yàn)證的實(shí)踐
前言
滑塊驗(yàn)證是比較常見(jiàn)的人機(jī)鑒別手段,但是自己做一時(shí)半會(huì)還真搞不出來(lái),想想這玩意還挺難琢磨,怎么識(shí)別是否是人機(jī)呢?本文介紹Vue+阿里云驗(yàn)證做出這個(gè)小功能。
集成阿里云驗(yàn)證
前端需要什么
- appkey
- scene
- 后端配合
引入阿里云驗(yàn)證
public/index.html
<head> ? <script src="https://g.alicdn.com/AWSC/AWSC/awsc.js"></script> </head>
vue.config.js
module.exports = { ? configureWebpack: { ? ? externals: { ? ? ? AWSC: 'AWSC', ? ? }, ? } }
封裝一個(gè)驗(yàn)證組件
思路其實(shí)很簡(jiǎn)單,功能也單一。
- 初始化加載阿里云驗(yàn)證控件
- 可刷新驗(yàn)證控件
下面說(shuō)兩個(gè)重點(diǎn)
1. 初始化放在mounted,是因?yàn)樯婕暗紻om加載問(wèn)題,created時(shí)Dom并未加載完成會(huì)報(bào)錯(cuò)。
2. Watch里面監(jiān)聽(tīng)是否刷新
3.. 記得樣式自定義下
下面開(kāi)始寫(xiě)組件
NoCaptcha.vue
<template> ? <div> ? ? <div id="nc"> ? ? </div> ? </div> </template> <script> export default { ? // 驗(yàn)證成功后,服務(wù)端報(bào)錯(cuò)(如賬號(hào)/密碼等錯(cuò)誤),需要重置滑塊 ? props: { ? ? reload: { ? ? ? type: Boolean, ? ? ? default: false, ? ? }, ? }, ? data() { ? ? return { ? ? ? ic: '', // noCaptcha實(shí)例 ? ? }; ? }, ? watch: { ? ? reload: { ? ? ? handler(newV) { ? ? ? ? console.log(newV); ? ? ? ? if (newV) { ? ? ? ? ? this.nc.reset(); ?// 重置滑塊 ? ? ? ? } ? ? ? }, ? ? }, ? }, ? mounted() { ? ? this.init(); // 初始化方法 ? }, ? methods: { ? ? init() { ? ? ? const self = this; ? ? ? // 實(shí)例化nc ? ? ? // eslint-disable-next-line no-undef ? ? ? AWSC.use('nc', function(state, module) { ? ? ? ? // 初始化 ? ? ? ? self.nc = module.init({ ? ? ? ? ? // 您可以在阿里云驗(yàn)證碼控制臺(tái)的配置管理頁(yè)簽找到對(duì)應(yīng)的appkey字段值,請(qǐng)務(wù)必正確填寫(xiě)。 ? ? ? ? ? appkey: 'FFFF0N00000000005CE9', ? ? ? ? ? // 您可以在阿里云驗(yàn)證碼控制臺(tái)的配置管理頁(yè)簽找到對(duì)應(yīng)的scene值,請(qǐng)務(wù)必正確填寫(xiě)。 ? ? ? ? ? scene: 'nc_login', ? ? ? ? ? // 滑塊渲染的DOM id。 ? ? ? ? ? renderTo: 'nc', ? ? ? ? ? // 您可以在該回調(diào)參數(shù)中將會(huì)話(huà)ID(sessionId)、簽名串(sig)、請(qǐng)求唯一標(biāo)識(shí)(token)字段記錄下來(lái),隨業(yè)務(wù)請(qǐng)求一同發(fā)送至您的服務(wù)端調(diào)用驗(yàn)簽。 ? ? ? ? ? success: function(data) { ? ? ? ? ? ? data.scene = 'nc_login' ? ? ? ? ? ? self.$emit('slideCallback', data); ? ? ? ? ? }, ? ? ? ? ? // 滑動(dòng)驗(yàn)證失敗時(shí)觸發(fā)該回調(diào)參數(shù)。 ? ? ? ? ? fail: function(failCode) { ? ? ? ? ? ? this.$message(`滑動(dòng)驗(yàn)證失敗,失敗編號(hào)${failCode}`); ? ? ? ? ? ? console.log(failCode); ? ? ? ? ? }, ? ? ? ? ? // 驗(yàn)證碼加載出現(xiàn)異常時(shí)觸發(fā)該回調(diào)參數(shù)。 ? ? ? ? ? error: function(errorCode) { ? ? ? ? ? ? this.$message(`驗(yàn)證碼加載異常,異常編號(hào)${errorCode}`); ? ? ? ? ? ? console.log(errorCode); ? ? ? ? ? ? self.$emit('slideCallback', {cls:false}); ? ? ? ? ? }, ? ? ? ? }); ? ? ? }); ? ? }, ? }, }; </script> <style lang="scss" scoped> #nc { ? width: 100%; ? display: contents; } /deep/.nc-container #nc_1_wrapper { ? width: 100%; ? height: 36px; ? line-height: 36px; ? #nc_1_n1t, ? #nc_1__bg, ? #nc_1_n1z, ? #nc_1__scale_text, ? .nc-lang-cnt { ? ? height: 36px; ? ? line-height: 36px; ? } } </style>
使用組件
需要考慮的問(wèn)題
- 驗(yàn)證控件沒(méi)加載出來(lái)的情況怎么辦?(例如IE不支持)
- 運(yùn)維人員不需要
- 有用戶(hù)名密碼,再去驗(yàn)證自動(dòng)調(diào)用登錄事件
很簡(jiǎn)單驗(yàn)證控件加載失敗會(huì)有個(gè)回調(diào),讓后端加個(gè)參數(shù),沒(méi)加載驗(yàn)證組件,讓他知道予以通行就好
<template> ? // 其他代碼略 ? <NoCaptcha @slideCallback="finishSlide" :reload="reload" /> </template> <script> // 其他代碼略 import NoCaptcha from '@/components/NoCaptch.vue'; data() { ? return { ? ? reload: false, ? } }, method: { ? // 點(diǎn)擊登錄 ? login() { ? ? // 驗(yàn)證略 ? ? this.reload = false; // 驗(yàn)證通過(guò)后,重置滑塊設(shè)置為false ? ? // 后端登錄接口 ? ? xx() ? ? .then(() => { ? ? ? ?// 登錄成功代碼略 ? ? }) ? ? .catch((err) => { ? ? ? ?// 其他代碼略 ? ? ? ?this.reload = true; // 需要重置滑塊 ? ? ? ?console.log(err || '該用戶(hù)無(wú)菜單權(quán)限,請(qǐng)聯(lián)系管理員'); // 錯(cuò)誤提示 ? ? }); ? }, ? // 完成滑動(dòng) ? finishSlide(data) { ? ? // 按需使用返回值 ? ? console.log('會(huì)話(huà)ID', data.sessionId) ? ? console.log('簽名串', data.sig) ? ? console.log('滑塊請(qǐng)求的token', data.token) ? ?? ? ? ?if (data.cls === false) {//驗(yàn)證加載失敗 ? ? ? ? this.loginForm.cls = false ? ? ? } ? ? ? if (data.sessionId) {//非人機(jī)操作 ? ? ? ? this.loginForm.scene = data.scene ? ? ? ? this.loginForm.ncToken = data.token ? ? ? ? this.loginForm.sig = data.sig ? ? ? ? this.loginForm.sessionId = data.sessionId ? ? ? ? delete this.loginForm.cls ? ? ? } ? ? ? if (this.loginForm.username && this.loginForm.password) {//填過(guò)用戶(hù)名密碼 ? ? ? ? this.login() ? ? ? } ? }, } </script>
思考
- 如果這個(gè)控件讓前端自己做或者后端自己做,能實(shí)現(xiàn)嗎?
- 這個(gè)滑動(dòng)驗(yàn)證機(jī)制明白嗎?
- 這個(gè)能實(shí)現(xiàn)絕對(duì)安全嗎?
PS:我思考了一下,前端需要引入阿里云的sdk,這個(gè)sdk會(huì)收集用戶(hù)數(shù)據(jù)。然后滑塊滑動(dòng)完成后會(huì)將這些數(shù)據(jù)進(jìn)行分析判斷是否為人機(jī)。當(dāng)然這算法是人家的機(jī)密,畢竟要賺錢(qián)的嘛。其實(shí)這個(gè)滑動(dòng)算法是可以模擬的,也不是絕對(duì)安全,只是增加了一個(gè)步驟而已。
到此這篇關(guān)于Vue集成阿里云做滑塊驗(yàn)證的實(shí)踐的文章就介紹到這了,更多相關(guān)Vue 滑塊驗(yàn)證內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- vue+elementui實(shí)現(xiàn)拖住滑塊拼圖驗(yàn)證
- vue實(shí)現(xiàn)移動(dòng)滑塊驗(yàn)證
- vue實(shí)現(xiàn)登錄時(shí)滑塊驗(yàn)證
- Vue3+Vue-cli4項(xiàng)目中使用騰訊滑塊驗(yàn)證碼的方法
- vue實(shí)現(xiàn)簡(jiǎn)單滑塊驗(yàn)證
- 使用konva和vue-konva庫(kù)實(shí)現(xiàn)拖拽滑塊驗(yàn)證功能
- VUE接入騰訊驗(yàn)證碼功能(滑塊驗(yàn)證)備忘
- Vue 實(shí)現(xiàn)拖動(dòng)滑塊驗(yàn)證功能(只有css+js沒(méi)有后臺(tái)驗(yàn)證步驟)
- vue-cli 自定義指令directive 添加驗(yàn)證滑塊示例
- vue封裝圖片滑塊驗(yàn)證組件的方法
相關(guān)文章
vue解決this.$refs.xx在mounted中獲取DOM元素為undefined問(wèn)題
這篇文章主要介紹了vue解決this.$refs.xx在mounted中獲取DOM元素為undefined問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03vue+moment實(shí)現(xiàn)倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了vue+moment實(shí)現(xiàn)倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08Vue+Echarts報(bào)錯(cuò)Cannot?set?properties?of?undefined?(settin
這篇文章主要介紹了Vue+Echarts報(bào)錯(cuò)Cannot?set?properties?of?undefined?(setting?‘plate‘)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08vue3封裝el-pagination分頁(yè)組件的完整代碼
這篇文章主要介紹了vue3封裝el-pagination分頁(yè)組件的完整代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-02-02Vue自定義render統(tǒng)一項(xiàng)目組彈框功能
這篇文章主要介紹了Vue自定義render統(tǒng)一項(xiàng)目組彈框功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06vue引入js數(shù)字小鍵盤(pán)的實(shí)現(xiàn)代碼
這篇文章主要介紹了vue引入js數(shù)字小鍵盤(pán)的實(shí)現(xiàn)代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-05-05Vue.js:使用Vue-Router 2實(shí)現(xiàn)路由功能介紹
本篇文章主要介紹了Vue.js:使用Vue-Router 2實(shí)現(xiàn)路由功能介紹,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02Vue中控制v-for循環(huán)次數(shù)的實(shí)現(xiàn)方法
今天小編就為大家分享一篇Vue中控制v-for循環(huán)次數(shù)的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09