做统一认证登录
This commit is contained in:
@@ -137,7 +137,9 @@ import {
|
||||
login,
|
||||
loginBySms,
|
||||
sendLoginCode,
|
||||
fetchVerifyConfig
|
||||
fetchVerifyConfig,
|
||||
loginUAC,
|
||||
switchTenant
|
||||
} from '@/api/auth.js'
|
||||
import {
|
||||
loginSuccess,
|
||||
@@ -146,7 +148,11 @@ import {
|
||||
getTenantName,
|
||||
getRememberLogin,
|
||||
saveRememberLogin,
|
||||
clearRememberLogin
|
||||
clearRememberLogin,
|
||||
isSSOEnabled,
|
||||
setAuthTokens,
|
||||
setTid,
|
||||
getToken
|
||||
} from '@/utils/auth.js'
|
||||
import { showGeetest4 } from '@/utils/geetest.js'
|
||||
|
||||
@@ -191,7 +197,6 @@ onMounted(async () => {
|
||||
rememberMe.value = true
|
||||
tenantName.value = remembered.tenantName
|
||||
username.value = remembered.account
|
||||
password.value = remembered.password
|
||||
} else {
|
||||
tenantName.value = getTenantName()
|
||||
}
|
||||
@@ -276,6 +281,84 @@ function navigateAfterLogin() {
|
||||
}, 400)
|
||||
}
|
||||
|
||||
/* ==================== 统一认证(UAC)登录 ====================
|
||||
* APP 无浏览器回跳,走密码直连:
|
||||
* 1) POST /auth/login 拿 access + refresh
|
||||
* 2) 一人多企业时弹出企业列表让用户选,选完调 /auth/switch-tenant
|
||||
* ============================================================ */
|
||||
|
||||
/** 选择要进入的企业(一人多企业场景) */
|
||||
function chooseTenant(tenants) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const names = (tenants || []).map(t => t.tenant_name || `企业${t.tid}`)
|
||||
uni.showActionSheet({
|
||||
itemList: names,
|
||||
title: '选择要进入的企业',
|
||||
success: (res) => resolve(tenants[res.tapIndex]),
|
||||
fail: () => reject(new Error('已取消选择'))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
/** 统一认证:账号密码登录 */
|
||||
async function submitSSOLogin() {
|
||||
const account = username.value.trim()
|
||||
const pwd = password.value
|
||||
if (!account) {
|
||||
uni.showToast({ title: '请输入账号', icon: 'none' })
|
||||
return false
|
||||
}
|
||||
if (!pwd) {
|
||||
uni.showToast({ title: '请输入密码', icon: 'none' })
|
||||
return false
|
||||
}
|
||||
|
||||
const data = await loginUAC({ account, password: pwd })
|
||||
if (!data || data.code !== 200) {
|
||||
uni.showToast({ title: (data && data.msg) || '登录失败', icon: 'none' })
|
||||
return false
|
||||
}
|
||||
|
||||
// 记住账号(不含密码)
|
||||
if (rememberMe.value) {
|
||||
saveRememberLogin({ tenantName: tenantName.value.trim(), account })
|
||||
} else {
|
||||
clearRememberLogin()
|
||||
}
|
||||
|
||||
let currentTid = 0
|
||||
if (data.need_choose_tenant) {
|
||||
// 多企业:先记住令牌,再让用户选择
|
||||
setAuthTokens(data.tokens || { access_token: data.access_token, refresh_token: data.refresh_token, sid: data.sid })
|
||||
const picked = await chooseTenant(data.tenants)
|
||||
const res = await switchTenant({ tid: picked.tid })
|
||||
if (res && res.code === 200 && res.data && res.data.tokens) {
|
||||
setAuthTokens(res.data.tokens)
|
||||
currentTid = picked.tid
|
||||
} else {
|
||||
uni.showToast({ title: (res && res.msg) || '进入企业失败', icon: 'none' })
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
setAuthTokens(data.tokens || {})
|
||||
if (data.tenants && data.tenants.length > 0) currentTid = data.tenants[0].tid
|
||||
}
|
||||
|
||||
setTid(currentTid)
|
||||
loginSuccess({
|
||||
token: getToken(),
|
||||
user: {
|
||||
id: data.identity ? data.identity.id : 0,
|
||||
account,
|
||||
name: (data.identity && (data.identity.nickname || data.identity.mobile)) || account,
|
||||
tid: currentTid,
|
||||
tenant_name: (data.tenants || []).map(t => t.tenant_name).join('、')
|
||||
}
|
||||
})
|
||||
navigateAfterLogin()
|
||||
return true
|
||||
}
|
||||
|
||||
async function submitAccountLogin(geetestResult = null) {
|
||||
if (!username.value.trim()) {
|
||||
uni.showToast({ title: '请输入账号', icon: 'none' })
|
||||
@@ -311,8 +394,7 @@ async function submitAccountLogin(geetestResult = null) {
|
||||
if (rememberMe.value) {
|
||||
saveRememberLogin({
|
||||
tenantName: tenantName.value.trim(),
|
||||
account: username.value.trim(),
|
||||
password: password.value
|
||||
account: username.value.trim()
|
||||
})
|
||||
} else {
|
||||
clearRememberLogin()
|
||||
@@ -326,6 +408,16 @@ async function handleLogin() {
|
||||
uni.showToast({ title: '请先同意用户协议', icon: 'none' })
|
||||
return
|
||||
}
|
||||
// 统一认证模式:账号即手机/邮箱,无需填写租户名
|
||||
if (isSSOEnabled()) {
|
||||
submitting.value = true
|
||||
try {
|
||||
await submitSSOLogin()
|
||||
} finally {
|
||||
submitting.value = false
|
||||
}
|
||||
return
|
||||
}
|
||||
if (!tenantName.value.trim()) {
|
||||
uni.showToast({ title: '请输入租户名称', icon: 'none' })
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user