mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-20 01:34:24 +08:00
face id/touch id supports ios safari
This commit is contained in:
+8
-6
@@ -7,26 +7,28 @@ const publicKeyCredentialCreationOptionsBaseTemplate = {
|
|||||||
authenticatorSelection: {
|
authenticatorSelection: {
|
||||||
authenticatorAttachment: 'platform',
|
authenticatorAttachment: 'platform',
|
||||||
requireResidentKey: false,
|
requireResidentKey: false,
|
||||||
userVerification: "required"
|
userVerification: "discouraged"
|
||||||
},
|
},
|
||||||
pubKeyCredParams: [
|
pubKeyCredParams: [
|
||||||
// https://www.iana.org/assignments/cose/cose.xhtml#algorithms
|
// https://www.iana.org/assignments/cose/cose.xhtml#algorithms
|
||||||
{type: "public-key", alg: -7}, // ECDSA w/ SHA-256
|
{type: "public-key", alg: -7}, // ECDSA w/ SHA-256
|
||||||
{type: "public-key", alg: -257}, // RSASSA-PKCS1-v1_5 using SHA-256
|
{type: "public-key", alg: -257}, // RSASSA-PKCS1-v1_5 using SHA-256
|
||||||
],
|
],
|
||||||
timeout: 1800000
|
timeout: 120000
|
||||||
};
|
};
|
||||||
|
|
||||||
const publicKeyCredentialRequestOptionsBaseTemplate = {
|
const publicKeyCredentialRequestOptionsBaseTemplate = {
|
||||||
allowCredentials: [{
|
allowCredentials: [{
|
||||||
type: 'public-key'
|
type: 'public-key'
|
||||||
}],
|
}],
|
||||||
userVerification: "required",
|
userVerification: "discouraged",
|
||||||
timeout: 1800000
|
timeout: 120000
|
||||||
}
|
};
|
||||||
|
|
||||||
function isSupported() {
|
function isSupported() {
|
||||||
return !!window.PublicKeyCredential && !!navigator.credentials;
|
return !!window.PublicKeyCredential
|
||||||
|
&& !!navigator.credentials
|
||||||
|
&& utils.isFunction(window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable);
|
||||||
}
|
}
|
||||||
|
|
||||||
function isCompletelySupported() {
|
function isCompletelySupported() {
|
||||||
|
|||||||
+3
-1
@@ -278,7 +278,8 @@ export default {
|
|||||||
'Statistics': 'Statistics',
|
'Statistics': 'Statistics',
|
||||||
'Settings': 'Settings',
|
'Settings': 'Settings',
|
||||||
'Back': 'Back',
|
'Back': 'Back',
|
||||||
'Unlock': 'Unlock',
|
'Unlock By PIN Code': 'Unlock By PIN Code',
|
||||||
|
'Unlock By Face ID/Touch ID': 'Unlock By Face ID/Touch ID',
|
||||||
'Re-login': 'Re-login',
|
'Re-login': 'Re-login',
|
||||||
'Username': 'Username',
|
'Username': 'Username',
|
||||||
'Your username': 'Your username',
|
'Your username': 'Your username',
|
||||||
@@ -426,6 +427,7 @@ export default {
|
|||||||
'User has canceled authentication': 'User has canceled authentication',
|
'User has canceled authentication': 'User has canceled authentication',
|
||||||
'User has canceled or this device does not support Face ID/Touch ID': 'User has canceled or this device does not support Face ID/Touch ID',
|
'User has canceled or this device does not support Face ID/Touch ID': 'User has canceled or this device does not support Face ID/Touch ID',
|
||||||
'Failed to authenticate by Face ID/Touch ID': 'Failed to authenticate by Face ID/Touch ID',
|
'Failed to authenticate by Face ID/Touch ID': 'Failed to authenticate by Face ID/Touch ID',
|
||||||
|
'Face ID/Touch ID authentication is not enabled': 'Face ID/Touch ID authentication is not enabled',
|
||||||
'Exchange Rates Data': 'Exchange Rates Data',
|
'Exchange Rates Data': 'Exchange Rates Data',
|
||||||
'Base Currency': 'Base Currency',
|
'Base Currency': 'Base Currency',
|
||||||
'Last Updated': 'Last Updated',
|
'Last Updated': 'Last Updated',
|
||||||
|
|||||||
@@ -278,7 +278,8 @@ export default {
|
|||||||
'Statistics': '统计',
|
'Statistics': '统计',
|
||||||
'Settings': '设置',
|
'Settings': '设置',
|
||||||
'Back': '返回',
|
'Back': '返回',
|
||||||
'Unlock': '解锁',
|
'Unlock By PIN Code': '使用PIN码解锁',
|
||||||
|
'Unlock By Face ID/Touch ID': '使用面容ID/指纹ID解锁',
|
||||||
'Re-login': '重新登陆',
|
'Re-login': '重新登陆',
|
||||||
'Username': '用户名',
|
'Username': '用户名',
|
||||||
'Your username': '你的用户名',
|
'Your username': '你的用户名',
|
||||||
@@ -421,11 +422,12 @@ export default {
|
|||||||
'Please enter your current PIN code when disable application lock': '禁用应用锁时需要输入当前的PIN码',
|
'Please enter your current PIN code when disable application lock': '禁用应用锁时需要输入当前的PIN码',
|
||||||
'Face ID / Touch ID': '面容ID / 指纹ID',
|
'Face ID / Touch ID': '面容ID / 指纹ID',
|
||||||
'You have enabled Face ID/Touch ID successfully': '您已经成功开启面容ID/指纹ID',
|
'You have enabled Face ID/Touch ID successfully': '您已经成功开启面容ID/指纹ID',
|
||||||
'This device does not support Face ID/Touch ID': '当前设备不支持 Face ID 或 Touch ID',
|
'This device does not support Face ID/Touch ID': '当前设备不支持面容ID或指纹ID',
|
||||||
'Failed to enable Face ID/Touch ID': '启用 Face ID 或 Touch ID 失败',
|
'Failed to enable Face ID/Touch ID': '启用面容ID或指纹ID失败',
|
||||||
'User has canceled authentication': '用户已经取消认证',
|
'User has canceled authentication': '用户已经取消认证',
|
||||||
'User has canceled or this device does not support Face ID/Touch ID': '用户已取消或当前设备不支持 Face ID 或 Touch ID',
|
'User has canceled or this device does not support Face ID/Touch ID': '用户已取消或当前设备不支持面容ID/指纹ID',
|
||||||
'Failed to authenticate by Face ID/Touch ID': '使用 Face ID / Touch ID 认证失败',
|
'Failed to authenticate by Face ID/Touch ID': '使用面容ID或指纹ID认证失败',
|
||||||
|
'Face ID/Touch ID authentication is not enabled': '面容ID或指纹ID认证没有启用',
|
||||||
'Exchange Rates Data': '汇率数据',
|
'Exchange Rates Data': '汇率数据',
|
||||||
'Base Currency': '基准货币',
|
'Base Currency': '基准货币',
|
||||||
'Last Updated': '最后更新',
|
'Last Updated': '最后更新',
|
||||||
|
|||||||
@@ -3,11 +3,12 @@
|
|||||||
<f7-login-screen-title>{{ $t('PIN Code') }}</f7-login-screen-title>
|
<f7-login-screen-title>{{ $t('PIN Code') }}</f7-login-screen-title>
|
||||||
<f7-list form>
|
<f7-list form>
|
||||||
<f7-list-item class="list-item-pincode-input">
|
<f7-list-item class="list-item-pincode-input">
|
||||||
<PincodeInput secure :length="6" v-model="pinCode" @keyup.native="unlock" />
|
<PincodeInput secure :length="6" v-model="pinCode" @keyup.native="unlockByPin" />
|
||||||
</f7-list-item>
|
</f7-list-item>
|
||||||
</f7-list>
|
</f7-list>
|
||||||
<f7-list>
|
<f7-list>
|
||||||
<f7-list-button :class="{ 'disabled': !pinCodeValid }" :text="$t('Unlock')" @click="unlock"></f7-list-button>
|
<f7-list-button :class="{ 'disabled': !pinCodeValid }" :text="$t('Unlock By PIN Code')" @click="unlockByPin"></f7-list-button>
|
||||||
|
<f7-list-button v-if="isWebAuthnAvailable" :text="$t('Unlock By Face ID/Touch ID')" @click="unlockByWebAuthn"></f7-list-button>
|
||||||
<f7-block-footer>
|
<f7-block-footer>
|
||||||
<f7-link :text="$t('Re-login')" @click="relogin"></f7-link>
|
<f7-link :text="$t('Re-login')" @click="relogin"></f7-link>
|
||||||
</f7-block-footer>
|
</f7-block-footer>
|
||||||
@@ -23,15 +24,30 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
isWebAuthnAvailable() {
|
||||||
|
return this.$settings.isEnableApplicationLockWebAuthn()
|
||||||
|
&& this.$user.getWebAuthnCredentialId()
|
||||||
|
&& this.$webauthn.isSupported();
|
||||||
|
},
|
||||||
pinCodeValid() {
|
pinCodeValid() {
|
||||||
return this.pinCode && this.pinCode.length === 6;
|
return this.pinCode && this.pinCode.length === 6;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
created() {
|
methods: {
|
||||||
|
unlockByWebAuthn() {
|
||||||
const self = this;
|
const self = this;
|
||||||
const router = self.$f7router;
|
const router = self.$f7router;
|
||||||
|
|
||||||
if (self.$settings.isEnableApplicationLockWebAuthn() && self.$user.getWebAuthnCredentialId()) {
|
if (!self.$settings.isEnableApplicationLockWebAuthn() || !self.$user.getWebAuthnCredentialId()) {
|
||||||
|
self.$toast('Face ID/Touch ID authentication is not enabled');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!self.$webauthn.isSupported()) {
|
||||||
|
self.$toast('This device does not support Face ID/Touch ID');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
self.$showLoading();
|
self.$showLoading();
|
||||||
|
|
||||||
self.$webauthn.verifyCredential(
|
self.$webauthn.verifyCredential(
|
||||||
@@ -62,10 +78,8 @@ export default {
|
|||||||
self.$toast('User has canceled or this device does not support Face ID/Touch ID');
|
self.$toast('User has canceled or this device does not support Face ID/Touch ID');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
},
|
},
|
||||||
methods: {
|
unlockByPin() {
|
||||||
unlock() {
|
|
||||||
const app = this.$f7;
|
const app = this.$f7;
|
||||||
const $$ = app.$;
|
const $$ = app.$;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user