1.导入全局的geetest.js
// main.js导入gt文件 import '../static/global/gt.js'
2.设计访问接口
// api.js文件 // 引入axios import Axios from 'axios' // 引入VueCookies import VueCookies from 'vue-cookies' // 设置默认URL Axios.defaults.baseURL = 'https://www.xxx.com/api/v1'; // 滑块验证码 const captchaCheckUrl = '/captcha_check/'; // 滑块验证码 export function geetest() { return Axios.get(`${captchaCheckUrl}`).then(res => res.data) } /* geetest()方法执行完的结果: 访问网址:https://www.xxx.com/api/v1/captcha_check/ { "error_no": 0, "data": { "success": 1, "gt": "37ca5631edd1e882721808d35163b3ad", "challenge": "2df4904f10c0a3f07fc5b60a429d5ef5" } } */
3.设置验证码宿主页面
<div class="inp"> <input v-model="username" type="text" placeholder="用户名 / 手机号码" class="user"> <input v-model="password" type="password" name class="pwd" placeholder="密码"> <!-- 验证码开始位置 --> <div id="geetest"></div> <!-- 验证码结束位置 --> <div class="rember"> <p> <input type="checkbox" class="no" name="a"> <span>记住密码</span> </p> <p>忘记密码</p> </div> <button class="login_btn" @click="loginHandler">登录</button> <p class="go_login"> 没有账号 <span>立即注册</span> </p> </div>
4.调用方法getGeetest()
created() {
this.getGeetest();
}
5.定义方法getGeetest()
// 验证码事件 getGeetest() { this.$http.geetest() ////////////////////////////////////////////////////////// .then(res => { let data = res.data; console.log(data); /* { "success": 1, "gt": "37ca5631edd1e882721808d35163b3ad", "challenge": "2df4904f10c0a3f07fc5b60a429d5ef5" } */ initGeetest( { // 以下配置参数来自服务端 SDK gt: data.gt, challenge: data.challenge, offline: !data.success, new_captcha: true, width: '100%' }, (captchaObj) => { console.log(captchaObj); // 这里可以调用验证实例 captchaObj 的实例方法 // 将验证码放在宿主页面,呼应【步骤3】 captchaObj.appendTo("#geetest"); // 这里调用了 onSuccess 方法,该方法介绍见下文 captchaObj.onSuccess(() => { var result = captchaObj.getValidate(); console.log(result); this.geetestObj = result }); } ); }) ////////////////////////////////////////////////////////// .catch(err => { console.log(err); }); } /* geetest()方法执行完的结果: 访问网址:https://www.xxx.com/api/v1/captcha_check/ { "error_no": 0, "data": { "success": 1, "gt": "37ca5631edd1e882721808d35163b3ad", "challenge": "2df4904f10c0a3f07fc5b60a429d5ef5" } } */
下面是登录组件的一个完整应用,前几步就按照操作弄就可以。后面主要部分应用在login组件上。
示例代码如下:
<template>
<div class="box">
<img src="https://www.luffycity.com/static/img/Loginbg.3377d0c.jpg" alt="登录页背景图片">
<div class="login">
<!-- 登录框上方内容 -->
<div class="login-title">
<img src="https://www.luffycity.com/static/img/Logotitle.1ba5466.png" alt>
<p>帮助有志向的年轻人通过努力学习获得体面的工作和生活!</p>
</div>
<!-- 登录框内容 -->
<div class="login_box">
<div class="title">
<span>密码登录</span>
<span>短信登录</span>
</div>
<div class="inp">
<input v-model="username" type="text" placeholder="用户名 / 手机号码" class="user">
<input v-model="password" type="password" name class="pwd" placeholder="密码">
<div id="geetest"></div>
<div class="rember">
<p>
<input type="checkbox" class="no" name="a">
<span>记住密码</span>
</p>
<p>忘记密码</p>
</div>
<button class="login_btn" @click="loginHandler">登录</button>
<p class="go_login">
没有账号
<span>立即注册</span>
</p>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
name: "Login",
data() {
return {
username: "",
password: "",
geetestObj: {},
};
},
methods: {
// 登录按钮点击事件
loginHandler() {
if (!this.geetestObj) {
return;
}
else {
// 登录状态
let params = {
geetest_challenge: this.geetestObj.geetest_challenge,
geetest_seccode: this.geetestObj.geetest_seccode,
geetest_validate: this.geetestObj.geetest_validate,
username: this.username,
password: this.password,
};
this.$http.login(params)
.then(res => {
if (res.error_no === 0) {
// 登陆成功后,返回之前访问的页面
this.$router.go(-1);
// 将返回的数据赋值给变量data
let data = res.data;
// 通过for-in循环来遍历data,将data中每个字典对象,存储到cookie
for (let key in data) {
this.$cookies.set(key, data[key])
}
// 分发actions中声明的方法
this.$store.dispatch('getUser', data);
}
})
.catch(err => {
console.log(err)
})
}
},
// 验证码事件
getGeetest() {
this.$http.geetest()
.then(res => {
let data = res.data;
console.log(data);
initGeetest(
{
// 以下配置参数来自服务端 SDK
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true,
width: '100%'
},
(captchaObj) => {
console.log(captchaObj);
// 这里可以调用验证实例 captchaObj 的实例方法
captchaObj.appendTo("#geetest");
// 这里调用了 onSuccess 方法,该方法介绍见下文
captchaObj.onSuccess(() => {
var result = captchaObj.getValidate();
console.log(result);
this.geetestObj = result
});
}
);
})
.catch(err => {
console.log(err);
});
}
},
created() {
this.getGeetest();
}
};
</script>