From a309b65e80f3f21b5ab7c182acb9764f47c677f1 Mon Sep 17 00:00:00 2001 From: zhouwx <1175765986@qq.com> Date: 星期五, 07 六月 2024 15:48:11 +0800 Subject: [PATCH] 登录key --- src/views/Login.vue | 162 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 149 insertions(+), 13 deletions(-) diff --git a/src/views/Login.vue b/src/views/Login.vue index 605f8eb..7d00b20 100644 --- a/src/views/Login.vue +++ b/src/views/Login.vue @@ -15,7 +15,7 @@ > <a-form-model-item ref="name" prop="name"> <a-input - placeholder="请输入用户" + placeholder="请输入用户名" size="large" v-model="form.name" autocomplete="new-password" @@ -80,10 +80,35 @@ <!-- </a-tab-pane>--> <!-- </a-tabs>--> <div style="margin-bottom: 20px"> - <a-checkbox :checked="isAuto" style="color:#fff;">自动登录</a-checkbox> + <a-checkbox :checked="saveAccount" style="color:#fff;" @change="isSave">记住密码</a-checkbox> <!-- <a style="float: right">忘记密码</a>--> </div> - <a-form-item style="text-align: center"> + <div style="margin-bottom: 20px;height: auto;width: 100%;background-color: white;border-radius: 5px"> + <div style="margin-left: 10px;display: flex;align-items: center;justify-content: space-between;padding: 0px 12px;"> + <div v-if="keyMsg"> + <a-icon style="color: lightcoral" type="exclamation-circle"/> + <span style="margin-left: 5px;line-height: 45px;font-size: 16px;color: lightcoral">{{keyMsg}}</span> + </div> + <div v-else> + <a-icon style="color: #52c41a" type="check-circle"/> + <span style="margin-left: 5px;line-height: 45px;font-size: 16px;color: #52c41a">加密证书检测成功</span> + </div> + <a-button + type="primary" + html-type="submit" + style="width: 20%;" + size="small" + @click="checkKey" + > + 重新检测 + </a-button> + </div> + </div> + <div style="margin-bottom: 20px;float: right;" > + <span style="color: #1890ff;cursor: pointer" @click="downLoadLKey">驱动下载</span> + </div> + + <div style="text-align: center"> <a-button type="primary" html-type="submit" @@ -91,11 +116,12 @@ size="large" @click="handleSubmit" :loading="isLoading" + v-preventReClick="1500" > 登录 </a-button> - </a-form-item> - <center><p>技术支持:中国科学院</p></center> + </div> + <center><p>技术支持:技术保障部</p></center> </a-form-model> </div> </div> @@ -105,40 +131,149 @@ import { login, getMenuAdmin } from "@/api/login"; import Cookies from 'js-cookie'; +import {Base64} from "js-base64"; +import SoftKey3W from './Syunew3W.js' + export default { name: "login", data() { return { isLoading: false, - isAuto: false, + saveAccount: false, // hasErrors, // form: this.$form.createForm(this), form: { name: '', - pwd: '' + pwd: '', + keyId:'',//锁id + keyUserName:'',//锁中的用户身份 + returnEncData:'',//签名数据 + rnd:"123"//随机字符 }, rules: { name: [{ required: true, message: '请输入用户名', trigger: 'blur' }], pwd: [{ required: true, message: '请输入用户密码', trigger: 'blur' }] }, - menu: [] + menu: [], + keyMsg: '未检测到加密证书,请确保已连接', }; }, created() { // this.$nextTick(() => { // this.form.validateFields(); // }); + this.hasUserCodeOrPassword() + //检测key + this.checkKey() }, methods: { - handleSubmit() { + downLoadLKey () { + console.log('222') + const { href } = this.$router.resolve({ + path: '/downKey' + }) + window.open(href,'_blank') + + }, + hasUserCodeOrPassword(){ + if (localStorage.getItem('userName') && localStorage.getItem('userPassword')) { + this.form.name = localStorage.getItem('userName') + this.form.pwd = Base64.decode(localStorage.getItem('userPassword'))//解密 + this.saveAccount = true + } + }, + async checkKey() { + let mSoftKey3A = new SoftKey3W();//注意,由于USB的操作是异步的,所以所有函数的调用前必须加await !!!!!!!!! + let DevicePath = await mSoftKey3A.FindPort(1);//'查找是否存在多把加密锁 + if (mSoftKey3A.GetLastError() == 0) { + this.keyMsg = "系统发现有2把及以上的加密证书" + return false + } + DevicePath = await mSoftKey3A.FindPort(0);//'查找是否存在加密锁 + if (mSoftKey3A.GetLastError() != 0) { + this.keyMsg = "未检测到加密证书,请确保已连接" + return false + } + this.keyMsg = "" + }, + + isSave(e){ + const t = this + t.saveAccount = !t.saveAccount + }, + async checkUsbkeyData(){ + let mSoftKey3A = new SoftKey3W();//注意,由于USB的操作是异步的,所以所有函数的调用前必须加await !!!!!!!!! + let DevicePath = await mSoftKey3A.FindPort(1);//'查找是否存在多把加密锁 + console.log(mSoftKey3A,'mSoftKey3A') + if (mSoftKey3A.GetLastError() == 0) { + this.keyMsg = "系统发现有2把及以上的加密证书" + this.$message.warning( "系统发现有2把及以上的加密证书"); + return false + } + DevicePath = await mSoftKey3A.FindPort(0);//'查找是否存在加密锁 + if (mSoftKey3A.GetLastError() != 0) { + this.keyMsg = "未检测到加密证书,请确保已连接" + this.$message.warning( "未检测到加密证书,请确保已连接"); + return false + } + console.log(DevicePath,'devpathhh') + //'读取锁的唯一ID + this.form.keyId=await mSoftKey3A.GetChipID(DevicePath); + + if( mSoftKey3A.GetLastError()!= 0 ) + { + this.$message.warning("返回芯片唯一ID时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()) + return false + } + console.log(this.form.keyId,'this.form.keyId') + //从锁中取出用户身份,与签名后的数据一并送到服务端进行验证。以验证用户身份 + this.form.keyUserName=await mSoftKey3A.GetSm2UserName(DevicePath); + + if( mSoftKey3A.GetLastError()!= 0 ) + { + this.$message.warning( "返回用户身份时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()); + return false + } + console.log(this.form.keyUserName,'this.form.keyUserName') + //使用默认的PIN码 + var Pin="123" + //这里使用锁中的私钥对身份-用户名及消息-随机数的进行数字签名,使用默认的PIN码,返回签名后的数据 + this.form.rnd=String(parseInt(Math.random()*(65536+1),10)); + this.form.returnEncData=await mSoftKey3A.YtSign(this.form.rnd,Pin,DevicePath); + if( mSoftKey3A.GetLastError()!= 0 ) + { + this.$message.warning( "进行签名时出现错误,错误码为:"+mSoftKey3A.GetLastError().toString()); + return false + } + if(this.form.name!=this.form.keyUserName){ + this.$message.warning( "用户身份不一致,无法登陆"); + return false + } + console.log(this.form.returnEncData,'this.form.returnEncData') + console.log(this.form,'this.form') + return true + }, + + async handleSubmit() { this.$refs.ruleForm.validate(async (valid) => { if (valid) { + let checkUsb=await this.checkUsbkeyData() + if(!checkUsb){ + return + } this.isLoading = true const res = await login(this.form) if (res.data.code === 100) { Cookies.set('resTk', res.data.data.tk); Cookies.set('resUid', res.data.data.uid); Cookies.set('userInfo',JSON.stringify(res.data.data),{expires: 7}) + if (this.saveAccount) { + localStorage.setItem('userName', this.form.name) + localStorage.setItem('userPassword', Base64.encode(this.form.pwd)) + } else { + localStorage.removeItem('userName') + localStorage.removeItem('userPassword') + } this.$router.push('/home') } else { this.$message.warning(res.data.msg); @@ -149,7 +284,8 @@ return false; } }); - } + }, + }, }; </script> @@ -185,11 +321,11 @@ h1{font-size: 48px;color:#fff;} } .login { - + .login-form { width: 400px; - margin: 60px auto 0px; - + margin: 60px auto 0px; + } } .ant-tabs{ -- Gitblit v1.9.2