diff --git a/package.json b/package.json index 7e12deeb..87726183 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@cornerstonejs/core": "^2.19.7", "@cornerstonejs/dicom-image-loader": "^2.19.7", "@cornerstonejs/tools": "^2.19.7", + "@fingerprintjs/fingerprintjs": "^4.6.2", "@icr/polyseg-wasm": "^0.4.0", "@microsoft/signalr": "^8.0.7", "@riophae/vue-treeselect": "^0.4.0", diff --git a/src/components/MFA/index.vue b/src/components/MFA/index.vue index dcbd7f1d..b5b2186d 100644 --- a/src/components/MFA/index.vue +++ b/src/components/MFA/index.vue @@ -1,25 +1,11 @@ @@ -86,6 +62,7 @@ export default { IdentityUserId: null, EMail: null, username: null, + isRemember: true }, rules: { Code: [ @@ -112,6 +89,18 @@ export default { }, }; }, + mounted() { + this.flag = true; + this.second = 60; + this.timer = setInterval(() => { + this.second--; + if (this.second <= 0) { + this.flag = false; + clearInterval(this.timer); + this.timer = null; + } + }, 1000); + }, methods: { open(data) { let { UserId, status, username, EMail } = data; @@ -198,10 +187,12 @@ export default { line-height: 30px; border-radius: 5px; background-color: #eee; + i { margin-right: 5px; } } + ::v-deep .el-dialog__header { font-weight: bold; } diff --git a/src/utils/fingerprint.js b/src/utils/fingerprint.js new file mode 100644 index 00000000..e5a787bd --- /dev/null +++ b/src/utils/fingerprint.js @@ -0,0 +1,32 @@ +import FingerprintJS from '@fingerprintjs/fingerprintjs'; + +export const customAgent = () => { + return new Promise(async resolve => { + const fpPromise = await FingerprintJS.load({ + monitoring: false + }); + const result = await fpPromise.get({ + products: ['fonts', 'screen', 'canvas'], + extendedData: true, + debug: false + }) + // const filteredComponents = Object.fromEntries( + // Object.entries(result.components) + // .filter(([key, value]) => value.confidence > 0.5) + // ); + + resolve({ + ...result, + }); + // fpPromise + // .then(fp => fp.get({ + // products: ['fonts', 'screen', 'canvas'], + // extendedData: true, + // debug: true + // })) + // .then(result => { + // // 自定义数据转换 + + // }); + }); +} diff --git a/src/utils/request.js b/src/utils/request.js index aaa72459..dba4f357 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -5,6 +5,7 @@ import router from '@/router' import WHITELIST from "./whiteList" import moment from 'moment-timezone'; import { encryptConfig } from "@/utils/encrypt" +import { customAgent } from './fingerprint' const ROUTER = require('@/router'); axios.defaults.withCredentials = false const service = axios.create({ @@ -26,6 +27,8 @@ service.interceptors.request.use( var language = zzSessionStorage.getItem('lang') config.headers['Accept-Language'] = language === 'en' ? 'en-US,en;q=0.5' : 'zh-CN,zh;q=0.9' config.headers['TimeZoneId'] = moment.tz.guess() + let fingerprint = await customAgent() + config.headers['BrowserFingerprint'] = fingerprint.visitorId if (config.ENCRYPT) { try { config = await encryptConfig(config)