Vue implements login verification code

Vue implements login verification code

This article example shares the specific code of vue to implement the login verification code for your reference. The specific content is as follows

Let’s start with the demo effect diagram

Canvas verification code component (can be copied directly without modification)

<template>
    <div class="s-canvas">
        <canvas id="s-canvas" :width="contentWidth" :height="contentHeight"></canvas>
    </div>
</template>
 
<script>
    export default {
        name: "SIdentify",
        props: {
            identifyCode:
                type: String,
                default: '1234'
            },
            fontSizeMin: {
                type: Number,
                default: 25
            },
            fontSizeMax: {
                type: Number,
                default: 30
            },
            backgroundColorMin: {
                type: Number,
                default: 255
            },
            backgroundColorMax: {
                type: Number,
                default: 255
            },
            colorMin:
                type: Number,
                default: 0
            },
            colorMax: {
                type: Number,
                default: 160
            },
            lineColorMin: {
                type: Number,
                default: 100
            },lineColorMax: {
                type: Number,
                default: 255
            },
            dotColorMin: {
                type: Number,
                default: 0
            },
            dotColorMax: {
                type: Number,
                default: 255
            },
            contentWidth: {
                type: Number,
                default: 112
            },
            contentHeight: {
                type: Number,
                default: 31
            }
        },
        methods: {
            // Generate a random number randomNum(min, max) {
                return Math.floor(Math.random() * (max - min) + min)
            },
            // Generate a random color randomColor(min, max) {
                let r = this.randomNum(min, max)
                let g = this.randomNum(min, max)
                let b = this.randomNum(min, max)
                return 'rgb(' + r + ',' + g + ',' + b + ')'
            },
            drawPic() {
                let canvas = document.getElementById('s-canvas')
                let ctx = canvas.getContext('2d')
                ctx.textBaseline = 'bottom'
                // Draw the background ctx.fillStyle = this.randomColor(this.backgroundColorMin, this.backgroundColorMax)
                ctx.fillRect(0, 0, this.contentWidth, this.contentHeight)
                // Draw text for (let i = 0; i < this.identifyCode.length; i++) {
                    this.drawText(ctx, this.identifyCode[i], i)
                }
                this.drawLine(ctx)
                this.drawDot(ctx)
            },
            drawText(ctx, txt, i) {
                ctx.fillStyle = this.randomColor(this.colorMin, this.colorMax)
                ctx.font = this.randomNum(this.fontSizeMin, this.fontSizeMax) + 'px SimHei'
                let x = (i + 1) * (this.contentWidth / (this.identifyCode.length + 1))
                let y = this.randomNum(this.fontSizeMax, this.contentHeight - 5)
                var deg = this.randomNum(-45, 45)
                // Modify the coordinate origin and rotation angle ctx.translate(x, y)
                ctx.rotate(deg * Math.PI / 180)
                ctx.fillText(txt, 0, 0)
                // Restore the coordinate origin and rotation angle ctx.rotate(-deg * Math.PI / 180)
                ctx.translate(-x, -y)
            },
            drawLine(ctx) {
                // Draw interference lines for (let i = 0; i < 5; i++) {
                    ctx.strokeStyle = this.randomColor(this.lineColorMin, this.lineColorMax)
                    ctx.beginPath()
                    ctx.moveTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
                    ctx.lineTo(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight))
                    ctx.stroke()
                }
            },
            drawDot(ctx) {
                // Draw interference points for (let i = 0; i < 80; i++) {
                    ctx.fillStyle = this.randomColor(0, 255)
                    ctx.beginPath()
                    ctx.arc(this.randomNum(0, this.contentWidth), this.randomNum(0, this.contentHeight), 1, 0, 2 * Math.PI)
                    ctx.fill()
                }
            }
        },
        watch:
            identifyCode() {
                this.drawPic()
            }
        },
        mounted() {
            this.drawPic()
        }
    }
</script>
 
<style scoped>
    .s-canvas {
        height: 38px;
 
    }
    .s-canvas canvas{
        margin-top: 1px;
        margin-left: 8px;
    }
</style>

The HTML part of the login page can be modified as needed

Introducing the verification code component

methods

Login page complete code

<style lang="less">
    @import './login.less';
</style>
 
<template>
    <div class="login" @keydown.enter="handleSubmit">
        <div class="login-con">
            <Card :bordered="false" style="width: 350px;height: 380px">
                <div class="form-con">
                    <Tabs value="name1" :animated="false">
                        <TabPane label="Login" name="name1">
                            <Form ref="loginForm" :model="form" :rules="rules" :label-width="90" inline>
                                <FormItem label="Account" prop="username">
                                    <Input v-model="form.username" placeholder="Please enter your account number" ref="input" clearable style="width: 200px"/>
                                </FormItem>
                                <FormItem label="Password" prop="password">
                                    <Input v-model="form.password" placeholder="Please enter your password" clearable style="width: 200px"/>
                                </FormItem>
                                <FormItem label="VerificationCode" prop="verificationCode">
                                    <Input v-model="form.verificationCode" placeholder="Please enter the verification code" clearable style="width: 200px"/>
                                    <div @click="refreshCode" style="margin-top: 20px">
                                        <!--Verification code component-->
                                        <s-identify :identifyCode="identifyCode"></s-identify>
                                    </div>
                                </FormItem>
                                <div style="text-align: center">
                                    <Button @click="handleSubmit" type="primary" style="margin-right: 20px">Login</Button>
                                </div>
                            </Form>
                        </TabPane>
                        <TabPane label="Register" name="name2">
                            <Form ref="formValidate" :model="formValidate" :rules="ruleValidate" :label-width="90" inline>
                                <FormItem label="Account" prop="username">
                                    <Input v-model="formValidate.username" placeholder="Please enter your account number" ref="input" clearable style="width: 200px"/>
                                </FormItem>
                                <FormItem label="Password" prop="password">
                                    <Input v-model="formValidate.password" placeholder="Please enter your password" clearable style="width: 200px"/>
                                </FormItem>
                                <FormItem label="Mobile Number" prop="mobile">
                                    <Input v-model="formValidate.mobile" placeholder="Please enter your mobile number" clearable style="width: 200px" />
                                </FormItem>
                                <FormItem label="SMS verification code" prop="header">
                                    <Input v-model="formValidate.header" placeholder="SMS verification code" style="width: 200px"/>
                                    <Button type="primary" size="small" @click="getCode" :disabled="codeDisabled">{{codeMsg}}</Button>
                                </FormItem>
                                <div style="text-align: center">
                                    <Button type="primary" @click="register('formValidate')">Register</Button>
                                </div>
                            </Form>
                        </TabPane>
                    </Tabs>
                </div>
            </Card>
        </div>
        <!--<vue-particles
                color="#FF4500"
                :particleOpacity="0.7"
                :particlesNumber="300"
                shapeType="circle"
                :particleSize="7"
                linesColor="#00FF00"
                :linesWidth="2"
                :lineLinked="true"
                :lineOpacity="0.4"
                :linesDistance="150"
                :moveSpeed="4"
                :hoverEffect="true"
                hoverMode="grab"
                :clickEffect="true"
                clickMode="repulse"
        >
        </vue-particles>-->
    </div>
</template>
 
<script>
    import Cookies from 'js-cookie';
    import {apiRequest, login, getCode} from '@/service/service';
    import SIdentify from '@/components/SIdentify';
 
    export default {
        components: { SIdentify },
        name: 'login',
        data() {
            return {
                form: {},
                formValidate: {},
                rules:
                    username: [
                        {required: true, message: 'Login username cannot be empty', trigger: 'blur'}
                    ],
                    password: [
                        {required: true, message: 'Login password cannot be empty', trigger: 'blur'}
                    ],
                    verificationCode:
                        {required: true, message: 'Verification code cannot be empty', trigger: 'blur'}
                    ]
                },
                ruleValidate: {
                    username: [
                        {required: true, message: 'Login username cannot be empty', trigger: 'blur'}
                    ],
                    password: [
                        {required: true, message: 'Login password cannot be empty', trigger: 'blur'}
                    ],
                    mobile: [
                        {required: true, message: 'Phone number cannot be empty', trigger: 'blur'}
                    ],
                    header: [
                        {required: true, message: 'SMS verification code cannot be empty', trigger: 'blur'}
                    ]
                },
                img:'../../static/grey_wolf.jpg',
                // Whether to disable the button codeDisabled: false,
                // Countdown seconds countdown: 60,
                // The text on the button codeMsg: 'Get verification code',
                //Timer timer: null,
                identifyCode: '',
                identifyCodes: '1234567890abcdefjhijklinopqrsduvwxyz',
            };
        },
        methods: {
            // Refresh verification code refreshCode () {
                this.identifyCode = ''
                this.makeCode(this.identifyCodes,4);
            },
            makeCode (o,l) {
                for (let i = 0; i < l; i++) {
                    this.identifyCode += this.identifyCodes[this.randomNum(0, this.identifyCodes.length)]
                }
            },
            randomNum (min, max) {
                return Math.floor(Math.random() * (max - min) + min)
            },
            // Get the SMS verification code getCode() {
                // 60-second countdown for verification code if (!this.timer) {
                    this.getValidStr();
                    this.timer = setInterval(this.getValidStr, 1000);
                }
                apiRequest(this, getCode(this.form.mobile), response => {
                });
            },
            getValidStr(){
                if (this.countdown > 0 && this.countdown <= 60) {
                    this.countdown--;
                    if (this.countdown !== 0) {
                        this.codeMsg = "Resend(" + this.countdown + ")";
                        this.codeDisabled = true;
                    } else {
                        clearInterval(this.timer);
                        this.codeMsg = "Get verification code";
                        this.countdown = 60;
                        this.timer = null;
                        this.codeDisabled = false;
                    }
                }
            },
            handleSubmit() {
                this.$refs.loginForm.validate((valid) => {
                    if (valid) {
                        // MD5 encryption of login password let password = this.$copyto.md5(this.form.password);
                        //Login interface request apiRequest(this, login(this.form.username, password), response => {
                            this.$store.commit('setUserInfo', response.data);
                            Cookies.set('user', this.form.username);
                            Cookies.set('userId', response.data.id);
                            localStorage.sessionId = response.sessionId
                            this.$store.commit('setAvator', '');
                            if (this.form.userName === 'admin') {
                                Cookies.set('access', 0);
                            } else {
                                Cookies.set('access', 1);
                            }
                            this.$router.push({name: 'home_index'});
                        });
                    }
                });
            },
            register() {
            }
        },
        mounted () {
            // Initialize the verification code this.identifyCode = ''
            this.makeCode(this.identifyCodes, 4)
        },
 
    };
</script>
 
<style>
 
</style>

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • vue+Element implements random verification code for login
  • Vue implementation of verification code login method example
  • Vue implements graphic verification code when logging in
  • Vue implements mobile phone verification code login
  • Use vue to realize the registration page effect vue to realize SMS verification code login
  • Vue implements graphic verification code login
  • Vue implements picture verification code when logging in
  • Vue implements mobile phone number and verification code login (60s countdown disabled)
  • Vue implements the verification code function of the login interface
  • How to set the verification code input box on the vue login page

<<:  Nginx configuration PC site mobile site separation to achieve redirection

>>:  Analysis of MySQL query sorting and query aggregation function usage

Recommend

Sample code for implementing neon button animation effects with CSS3.0

Today I will share with you a neon button animati...

Detailed steps for configuring Tomcat server in IDEA 2020

The steps for configuring Tomcat in IDEA 2020 are...

Vue3.0 implements encapsulation of checkbox components

This article example shares the specific code of ...

Detailed introduction to Mysql date query

Query the current date SELECT CURRENT_DATE(); SEL...

WeChat applet implements search function and jumps to search results page

Search Page: search.wxml page: <view class=&qu...

Detailed explanation of ES6 Promise usage

Table of contents What is a Promise? Usage of rej...

Analysis of JavaScript's event loop mechanism

Table of contents Preface: 1. Reasons for the eve...

Mysql implementation of full-text search and keyword scoring method example

1. Introduction Today a colleague asked me how to...

Detailed examples of variable and function promotion in JavaScript

js execution Lexical analysis phase: includes thr...

Detailed explanation of CocosCreator message distribution mechanism

Overview This article begins to introduce content...

What are the advantages of using B+ tree index in MySQL?

Before understanding this problem, let's firs...

A complete guide to clearing floats in CSS (summary)

1. Parent div defines pseudo-classes: after and z...