fix: 登录兼容联通19位
This commit is contained in:
@@ -258,6 +258,50 @@
|
||||
return (params.get('identifier') || '').trim();
|
||||
};
|
||||
|
||||
const isNineteenDigitIccidPrefix = (value) => /^89\d{17}$/.test(value);
|
||||
|
||||
const appendIccidLuhnCheckDigit = (prefix) => {
|
||||
let sum = 0;
|
||||
|
||||
for (let index = prefix.length - 1, offset = 0; index >= 0; index--, offset++) {
|
||||
let digit = Number(prefix[index]);
|
||||
if (offset % 2 === 0) {
|
||||
digit *= 2;
|
||||
if (digit > 9) digit -= 9;
|
||||
}
|
||||
sum += digit;
|
||||
}
|
||||
|
||||
return `${prefix}${(10 - (sum % 10)) % 10}`;
|
||||
};
|
||||
|
||||
const verifyAssetToken = async (assetIdentifier) => {
|
||||
const verifyData = await authApi.verifyAsset(assetIdentifier);
|
||||
if (!verifyData?.asset_token) {
|
||||
throw { msg: '资产校验未返回有效登录凭证' };
|
||||
}
|
||||
return verifyData;
|
||||
};
|
||||
|
||||
const verifyAssetWithIccidRetry = async (enteredIdentifier) => {
|
||||
try {
|
||||
return {
|
||||
verifyData: await verifyAssetToken(enteredIdentifier),
|
||||
verifiedIdentifier: enteredIdentifier
|
||||
};
|
||||
} catch (firstError) {
|
||||
if (!isNineteenDigitIccidPrefix(enteredIdentifier)) {
|
||||
throw firstError;
|
||||
}
|
||||
|
||||
const completedIccid = appendIccidLuhnCheckDigit(enteredIdentifier);
|
||||
return {
|
||||
verifyData: await verifyAssetToken(completedIccid),
|
||||
verifiedIdentifier: completedIccid
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
const doLogin = async () => {
|
||||
loading.value = true;
|
||||
// 丢弃上一轮未完成授权留下的临时凭证,避免校验失败时继续复用。
|
||||
@@ -265,13 +309,11 @@
|
||||
sessionStorage.removeItem('assetToken');
|
||||
}
|
||||
try {
|
||||
const verifyData = await authApi.verifyAsset(identifier.value);
|
||||
if (!verifyData?.asset_token) {
|
||||
throw { msg: '资产校验未返回有效登录凭证' };
|
||||
}
|
||||
const enteredIdentifier = identifier.value;
|
||||
const { verifyData, verifiedIdentifier } = await verifyAssetWithIccidRetry(enteredIdentifier);
|
||||
|
||||
userStore.setAssetToken(verifyData.asset_token);
|
||||
userStore.setIdentifier(identifier.value);
|
||||
userStore.setIdentifier(verifiedIdentifier);
|
||||
|
||||
await redirectToWxAuth(verifyData.asset_token);
|
||||
} catch (e) {
|
||||
|
||||
Reference in New Issue
Block a user