Add popup-based Google login function

This commit is contained in:
Tim
2025-08-03 19:17:00 +08:00
parent d58d5014da
commit 1b39289dad
3 changed files with 43 additions and 7 deletions

View File

@@ -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)
}
)
}