極驗geetest滑動驗證前端


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>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM