53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
import { AUTH_VERIFICATION_OPERATION } from '@/utils/auth/verification.js'
|
|
import { session } from '@/utils/session.js'
|
|
|
|
export const assertAuthVerificationOperation = (operationCode) => {
|
|
if (!Object.values(AUTH_VERIFICATION_OPERATION).includes(operationCode)) {
|
|
throw new TypeError('认证动作不属于当前认证合同')
|
|
}
|
|
return operationCode
|
|
}
|
|
|
|
export const assertValidToken = (validToken) => {
|
|
if (typeof validToken !== 'string' || !validToken.trim()) {
|
|
throw new TypeError('发送短信前必须取得有效的行为验证票据')
|
|
}
|
|
return validToken.trim()
|
|
}
|
|
|
|
export const normalizeOptionalValidToken = (validToken) =>
|
|
validToken === undefined ? undefined : assertValidToken(validToken)
|
|
|
|
export const assertPasswordHash = (passwordHash) => {
|
|
if (typeof passwordHash !== 'string' || !/^[a-f0-9]{32}$/.test(passwordHash)) {
|
|
throw new TypeError('密码摘要必须是 32 位小写 MD5')
|
|
}
|
|
return passwordHash
|
|
}
|
|
|
|
export const normalizeOptionalReferralCode = (referralCode) => {
|
|
if (referralCode === undefined || referralCode === null || referralCode === '') return ''
|
|
if (typeof referralCode !== 'string') throw new TypeError('推荐码必须是字符串')
|
|
const normalized = referralCode.trim()
|
|
if (!/^[A-Za-z0-9_-]{4,64}$/.test(normalized)) {
|
|
throw new TypeError('推荐码格式无效')
|
|
}
|
|
return normalized
|
|
}
|
|
|
|
export const assertWechatAuthorizationCode = (authorizationCode) => {
|
|
if (typeof authorizationCode !== 'string' || !authorizationCode.trim()) {
|
|
throw new TypeError('微信授权未返回有效临时票据')
|
|
}
|
|
return authorizationCode.trim()
|
|
}
|
|
|
|
export const saveLogin = (loginResult) => {
|
|
const token = loginResult?.access_token
|
|
if (typeof token !== 'string' || !token || token.trim() !== token) {
|
|
throw new Error('登录响应未包含有效的会话令牌')
|
|
}
|
|
session.saveToken(token)
|
|
return loginResult
|
|
}
|