<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
記錄一下前端使用驗證碼登入的過程
後端用的是node.js,關鍵模組是svg-captcha
前端使用的是vue2
最後的登入介面如下:
先上程式碼,然後解釋
const svgCaptcha = require('svg-captcha') exports.checkCode = (req, res) => { const img = svgCaptcha.create({ size: 4, ignoreChars: '0o1l', color: true, noise: 1, background: '#666', height: 40, width: 113 }) console.log(img.text); res.send(img) }
這是最關鍵的程式碼,我習慣將路由和路由處理常式分開寫,上面這塊程式碼是路由處理常式
實際上就是利用svg-captcha生成了一個驗證碼圖片,其中有幾個引數需要重點關注一下:
const express = require('express'); const userHandle = require('../route_handle/user') const router = express.Router(); router.get('/checkCode', userHandle.checkCode) module.exports = router
這沒啥好說的
後端就這些了,後端的埠用的是3020,需要設定一下跨域,不然前端存取不到
先上程式碼
<template> <div class="login"> <el-form class="login-form" :model="loginForm"> <h3 class="title">若依後臺管理系統</h3> <el-form-item> <el-input placeholder="Account" type="text" prefix-icon="el-icon-user-solid" v-model="loginForm.username"> </el-input> </el-form-item> <el-form-item> <el-input placeholder="Password" type="password" prefix-icon="el-icon-lock" v-model="loginForm.password"> </el-input> </el-form-item> <el-form-item> <el-input placeholder="CheckCode" prefix-icon="el-icon-picture-outline-round" v-model="loginForm.checkCode" style="width: 63%"> </el-input> <div class="login-code"> <!-- <img :src="codeUrl" class="login-code-imgs" @click="getCode"/> --> <div @click="getCode" v-html="code" style="vertical-align:middle"></div> </div> </el-form-item> <el-checkbox v-model="loginForm.rememberme" style="margin: 0 0 15px 0;">Remenber Me</el-checkbox> <el-form-item> <el-button style="width: 100%" @click="submit('loginForm')" type="primary">Login</el-button> </el-form-item> </el-form> <div class="el-login-footer"> <span>Copyright © 2018-2022 huanggang All Rights Reserved.</span> </div> </div> </template> <script> // import { getCodeImg } from '@/api/login' export default { data() { return { loginForm: { username: '', password: '', checkCode: '', rememberme: false }, codeUrl: '', code: '', codeText: '' } }, methods: { submit() { if (this.loginForm.checkCode.toLowerCase() == this.codeText.toLowerCase()) { this.$message({ type: "success", message: '登入成功' }) } else (this.$message({ type: 'error', message: '驗證碼錯誤!' })) }, getCode() { this.$axios.get('/checkCode') .then(res => { console.log(res) this.code = res.data.data this.codeText = res.data.text }) } }, created() { this.getCode() } } </script> <style scoped lang="scss"> .login { display: flex; height: 100%; background: url(../assets/images/login-background.jpg); background-size: cover; justify-content: center; align-items: center; } .title { text-align: center; color: #707070; margin: 0 auto 30px; } .login-form { box-sizing: border-box; width: 400px; border-radius: 6px; background-color: #fff; padding: 25px 25px 5px 25px; } .el-login-footer { height: 40px; line-height: 40px; position: fixed; bottom: 0; color: #fff; font-size: 12px; letter-spacing: 1px; font-family: Arial; } .login-code { width: 33%; float: right; div { cursor: pointer; } } .login-code-imgs {} </style>
這裡不再贅述相關的設定了,直接看關鍵程式碼
getCode() 方法實現的功能是點選驗證碼圖片時,切換獲取驗證碼
獲取驗證碼的方法是存取後端介面/checkCode,這個介面返回兩個值(後端補充說明),一個是text,一個是data,text就是驗證碼的字串值,data是驗證碼的html地址,在postman中測試返回的結果如下:
頁面上使用v-html繫結驗證碼顯示的地址
然後把text和data的值都賦給相應的資料
當然,為了能開啟登入頁面時,直接能顯示驗證碼圖片,需要把getCode方法掛載在生命週期函數created上
登入驗證不再校驗資料庫中的使用者名稱和密碼,只示意一下驗證碼的功能
在點選login按鈕時校驗驗證碼是否正確,功能寫在submit()方法中,前端input框中使用v-model雙向繫結了loginForm.checkCode的值,所以只要驗證loginForm.checkCode與驗證碼codeText是否相等即可,為了保證使用者體驗,一般是忽略字母輸入大小寫的,所以都使用toLowerCase()處理一下。
這樣就完成了前後端分離模式的登入驗證碼使用功能
到此這篇關於node+vue前後端分離實現登入時使用圖片驗證碼的文章就介紹到這了,更多相關node vue圖片驗證碼登入內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45