diff --git a/app/api/auth/google/callback/route.ts b/app/api/auth/google/callback/route.ts index 7558d6b..05b7337 100644 --- a/app/api/auth/google/callback/route.ts +++ b/app/api/auth/google/callback/route.ts @@ -169,28 +169,48 @@ export async function POST(request: NextRequest) { ); } - // 第二步:使用id_token调用Java后端 - const javaBaseUrl = process.env.NEXT_PUBLIC_JAVA_URL || 'https://auth.test.movieflow.ai'; - console.log('开始调用Java后端:', javaBaseUrl); + // 第二步:使用id_token调用smartvideo-server的register_with_invite接口 + const smartvideoBaseUrl = process.env.NEXT_PUBLIC_SMARTVIDEO_URL; + console.log('开始调用smartvideo-server后端:', smartvideoBaseUrl); - const backendResponse = await fetch(`${javaBaseUrl}/api/auth/google/login`, { + // 从Google ID Token中解析用户信息(简单解析,仅用于获取email等基本信息) + let googleUserInfo: any = {}; + try { + // 解码Google ID Token的payload部分(注意:这里只是为了获取基本信息,真正的验证在后端进行) + const tokenParts = id_token.split('.'); + if (tokenParts.length === 3) { + const payload = JSON.parse(atob(tokenParts[1])); + googleUserInfo = { + email: payload.email, + name: payload.name, + given_name: payload.given_name, + family_name: payload.family_name + }; + } + } catch (e) { + console.warn('解析Google ID Token失败,使用空的用户信息:', e); + } + + const backendResponse = await fetch(`${smartvideoBaseUrl}/api/user_fission/register_with_invite`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Accept': 'application/json', }, body: JSON.stringify({ - idToken: id_token, // 使用从Google获取的id_token - action: 'auto', // 自动判断登录或注册 - inviteCode: inviteCode || stateData.inviteCode || undefined + email: googleUserInfo.email, // 从Google Token中获取的邮箱 + name: googleUserInfo.name, // 从Google Token中获取的姓名 + google_id_token: id_token, // Google ID Token + auth_type: 'GOOGLE', // 标识为Google OAuth注册 + invite_code: inviteCode || stateData.inviteCode || undefined }) }); - console.log('Java后端响应状态:', backendResponse.status); + console.log('smartvideo-server后端响应状态:', backendResponse.status); const backendResult = await backendResponse.json(); - if (!backendResponse.ok || !backendResult.success) { - console.error('Java后端处理Google OAuth失败:', backendResult); + if (!backendResponse.ok || !backendResult.successful) { + console.error('smartvideo-server处理Google OAuth失败:', backendResult); return NextResponse.json( { success: false, @@ -201,17 +221,25 @@ export async function POST(request: NextRequest) { } console.log('Google OAuth认证成功:', { - userId: backendResult.data?.user?.userId, - email: backendResult.data?.user?.email + userId: backendResult.data?.user_id, + email: backendResult.data?.email }); - // 返回成功结果 + // 返回成功结果,格式与原有保持一致以确保前端兼容性 return NextResponse.json({ success: true, data: { + // 包含token以支持前端认证 token: backendResult.data.token, - user: backendResult.data.userInfo || backendResult.data.user, - message: 'Google authentication successful' + user: { + userId: backendResult.data.user_id, + userName: backendResult.data.name, + name: backendResult.data.name, + email: backendResult.data.email, + authType: backendResult.data.auth_type, + isNewUser: true // 通过register_with_invite接口的都是新用户或首次OAuth绑定 + }, + message: 'Google OAuth registration successful with credit rewards' } });