From abb6c98df76262537c1e33e10472cb3e269f102a Mon Sep 17 00:00:00 2001 From: Tim <135014430+nagisa77@users.noreply.github.com> Date: Tue, 15 Jul 2025 11:06:33 +0800 Subject: [PATCH] Refine login error handling and adjust Google signup flow --- open-isle-cli/src/utils/google.js | 68 +++++++++++-------- open-isle-cli/src/views/SignupPageView.vue | 7 +- .../src/views/SignupReasonPageView.vue | 22 ++++-- .../openisle/controller/AuthController.java | 22 ++++-- .../com/openisle/service/UserService.java | 4 ++ .../controller/AuthControllerTest.java | 7 +- 6 files changed, 87 insertions(+), 43 deletions(-) diff --git a/open-isle-cli/src/utils/google.js b/open-isle-cli/src/utils/google.js index a529f88ed..620f5c578 100644 --- a/open-isle-cli/src/utils/google.js +++ b/open-isle-cli/src/utils/google.js @@ -1,33 +1,47 @@ import { API_BASE_URL, GOOGLE_CLIENT_ID, toast } from '../main' import { setToken, loadCurrentUser } from './auth' -export function googleSignIn(redirect, reason) { - if (!window.google || !GOOGLE_CLIENT_ID) { - toast.error('Google 登录不可用') - return - } - window.google.accounts.id.initialize({ - client_id: GOOGLE_CLIENT_ID, - callback: async ({ credential }) => { - try { - const res = await fetch(`${API_BASE_URL}/api/auth/google`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ idToken: credential, reason }) - }) - const data = await res.json() - if (res.ok && data.token) { - setToken(data.token) - await loadCurrentUser() - toast.success('登录成功') - if (redirect) redirect() - } else { - toast.error(data.error || '登录失败') - } - } catch (e) { - toast.error('登录失败') - } +export async function googleGetIdToken() { + return new Promise((resolve, reject) => { + if (!window.google || !GOOGLE_CLIENT_ID) { + toast.error('Google 登录不可用') + reject() + return } + window.google.accounts.id.initialize({ + client_id: GOOGLE_CLIENT_ID, + callback: ({ credential }) => resolve(credential) + }) + window.google.accounts.id.prompt() }) - window.google.accounts.id.prompt() +} + +export async function googleAuthWithToken(idToken, reason, redirect) { + try { + const res = await fetch(`${API_BASE_URL}/api/auth/google`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ idToken, reason }) + }) + const data = await res.json() + if (res.ok && data.token) { + setToken(data.token) + await loadCurrentUser() + toast.success('登录成功') + if (redirect) redirect() + } else { + toast.error(data.error || '登录失败') + } + } catch (e) { + toast.error('登录失败') + } +} + +export async function googleSignIn(redirect, reason) { + try { + const token = await googleGetIdToken() + await googleAuthWithToken(token, reason, redirect) + } catch { + /* ignore */ + } } diff --git a/open-isle-cli/src/views/SignupPageView.vue b/open-isle-cli/src/views/SignupPageView.vue index a21b3d4a1..50ceaf497 100644 --- a/open-isle-cli/src/views/SignupPageView.vue +++ b/open-isle-cli/src/views/SignupPageView.vue @@ -82,7 +82,7 @@