效果图
工具
- vue 2.x
- vue-cli 3
- 阿里云账号(后台需要配好:appkey,scene)
index.html
<head>
<script src="https://g.alicdn.com/AWSC/AWSC/awsc.js"></script>
</head>
vue.config.js
module.exports = {
configureWebpack: {
externals: {
AWSC: 'AWSC',
},
}
}
组件 components/NoCaptch.vue
<template>
<div>
<div id="nc"></div>
</div>
</template>
<script>
import { errorMsg } from '@/utils/message'; // 错误提示,代码略
export default {
// 验证成功后,服务端报错(如账号/密码等错误),需要重置滑块
props: {
reload: {
type: Boolean,
default: false,
},
},
data() {
return {
nc: '', // noCaptcha实例
};
},
watch: {
reload: {
handler(newV) {
if (newV) {
this.nc.reset(); // 重置滑块
}
},
},
},
created() {
this.init(); // 初始化方法
},
methods: {
init() {
const self = this;
// 实例化nc
AWSC.use('nc', function(state, module) {
// 初始化
self.nc = module.init({
// 您可以在阿里云验证码控制台的配置管理页签找到对应的appkey字段值,请务必正确填写。
appkey: 'xx',
// 您可以在阿里云验证码控制台的配置管理页签找到对应的scene值,请务必正确填写。
scene: 'xx',
// 滑块渲染的DOM id。
renderTo: 'nc',
// 您可以在该回调参数中将会话ID(sessionId)、签名串(sig)、请求唯一标识(token)字段记录下来,随业务请求一同发送至您的服务端调用验签。
success: function(data) {
self.$emit('slideCallback', data);
},
// 滑动验证失败时触发该回调参数。
fail: function(failCode) {
errorMsg(`滑动验证失败,失败编号${failCode}`);
console.log(failCode);
},
// 验证码加载出现异常时触发该回调参数。
error: function(errorCode) {
errorMsg(`验证码加载异常,异常编号${errorCode}`);
console.log(errorCode);
},
});
});
},
},
};
</script>
<style lang="less" scoped>
/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>
登录页引用组件 login.vue
<template>
// 其他代码略
<NoCaptcha @slideCallback="finishSlide" :reload="reload" />
</template>
<script>
// 其他代码略
import NoCaptcha from '@/components/NoCaptch.vue';
data() {
return {
reload: false,
}
},
method: {
// 点击登录
login() {
// 验证略
this.reload = false; // 验证通过后,重置滑块设置为false
// 后端登录接口
xx()
.then(() => {
// 登录成功代码略
})
.catch((err) => {
// 其他代码略
this.reload = true; // 需要重置滑块
errorMsg(err || '该用户无菜单权限,请联系管理员'); // 错误提示
});
},
// 完成滑动
finishSlide(data) {
// 按需使用返回值
console.log('会话ID', data.sessionId)
console.log('签名串', data.sig)
console.log('滑块请求的token', data.token)
},
}
</script>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。