+
@@ -54,7 +54,7 @@
Google 登录
diff --git a/frontend/src/utils/google.js b/frontend/src/utils/google.js index 533d6c808..d042cbae8 100644 --- a/frontend/src/utils/google.js +++ b/frontend/src/utils/google.js @@ -12,7 +12,23 @@ export async function googleGetIdToken() { window.google.accounts.id.initialize({ client_id: GOOGLE_CLIENT_ID, callback: ({ credential }) => resolve(credential), - use_fedcm: true + use_fedcm: true + }) + window.google.accounts.id.prompt() + }) +} + +export async function googleGetIdTokenWithPop() { + return new Promise((resolve, reject) => { + if (!window.google || !GOOGLE_CLIENT_ID) { + toast.error('Google 登录不可用, 请检查网络设置与VPN') + reject() + return + } + window.google.accounts.id.initialize({ + client_id: GOOGLE_CLIENT_ID, + callback: ({ credential }) => resolve(credential), + ux_mode: 'popup' }) window.google.accounts.id.prompt() }) @@ -53,6 +69,15 @@ export async function googleSignIn(redirect_success, redirect_not_approved) { } } +export async function googleSignInWithPop(redirect_success, redirect_not_approved) { + try { + const token = await googleGetIdTokenWithPop() + await googleAuthWithToken(token, redirect_success, redirect_not_approved) + } catch { + /* ignore */ + } +} + import router from '../router' export function loginWithGoogle() { @@ -64,4 +89,15 @@ export function loginWithGoogle() { router.push('/signup-reason?token=' + token) } ) +} + +export function loginWithGoogleWithPop() { + googleSignInWithPop( + () => { + router.push('/') + }, + token => { + router.push('/signup-reason?token=' + token) + } + ) } \ No newline at end of file diff --git a/frontend/src/views/LoginPageView.vue b/frontend/src/views/LoginPageView.vue index cba93fb48..906c17f47 100644 --- a/frontend/src/views/LoginPageView.vue +++ b/frontend/src/views/LoginPageView.vue @@ -31,7 +31,7 @@