diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index c1aeb4b..683d432 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -4,6 +4,7 @@ import { ref } from 'vue' import { useRouter } from 'vue-router' import { useUserStore } from '@/stores/user' import { ElMessage } from 'element-plus' +import { pb } from '@/api/pocketbase' import PasswordInput from '@/components/common/PasswordInput.vue' const router = useRouter() @@ -15,16 +16,29 @@ const loading = ref(false) async function handleLogin() { if (!identity.value || !password.value) { - ElMessage.warning('请输入邮箱和密码') + ElMessage.warning('请输入昵称/邮箱和密码') return } try { loading.value = true - await userStore.login(identity.value, password.value) + let loginIdentity = identity.value.trim() - const redirect = '/' - router.push(redirect) + // 如果不包含 @,按昵称或用户名查找对应 username 用于认证 + if (!loginIdentity.includes('@')) { + const result = await pb.collection('users').getList(1, 1, { + filter: `name="${loginIdentity}" || username="${loginIdentity}"`, + $autoCancel: false + }) + if (result.items.length === 0) { + ElMessage.error('用户不存在') + return + } + loginIdentity = (result.items[0] as any).username + } + + await userStore.login(loginIdentity, password.value) + router.push('/') } catch (error: any) { ElMessage.error(error.message || '登录失败') } finally { @@ -45,12 +59,11 @@ async function handleLogin() {