谷歌身份验证错误:“redirect_uri_mismatch”

问题描述 投票:0回答:1

错误:当您请求 Google 颁发访问令牌时发生“redirect_uri_mismatch”。

下面是React客户端代码。

const googleLogin = useGoogleLogin({
    flow: "auth-code",
    onSuccess: async (codeResponse) => {
      console.log(codeResponse);
      const tokens = await axios.post("http://localhost:4000/api/auth/google", {
        code: codeResponse.code,
      });

      console.log(tokens);
    },
    onError: (errorResponse) => console.log(errorResponse),
  });

以下代码用于使用从客户端收到的身份验证代码来获取访问令牌。

@Post("google")
  async googleAuth(@Body() body: { code: string }) {
    try {
      const data = await axios.post("https://oauth2.googleapis.com/token", {
        client_id: setting.GOOGLE_CLIENT_ID,
        client_secret: setting.GOOGLE_CLIENT_SECRET,
        code: body.code,
        redirect_uri: "http://localhost:4000/api/auth/google/redirect",
        grant_type: "authorization_code",
      });
      console.log(data);
      return data.data; // 
    } catch (error) {
      console.error(error);
      return { error: "Internal Server Error" }; // 
    }
  }

我的开发环境是fastify + Nestjs。 我还在Google云平台上编写了重定向uri,但我不知道为什么会出现此错误。我该如何解决它?

我检查了重定向 uri。

reactjs redirect nestjs google-oauth fastify
1个回答
0
投票

我解决了这个问题哈哈...

@Post("google")
  async googleAuth(@Body() body: { code: string }) {
    const oAuth2Client = new OAuth2Client(setting.GOOGLE_CLIENT_ID, setting.GOOGLE_CLIENT_SECRET, "postmessage");
    const { tokens } = await oAuth2Client.getToken(body.code);
    const ticket = await oAuth2Client.verifyIdToken({
      idToken: tokens.id_token,
      audience: setting.GOOGLE_CLIENT_ID,
    });

    const profile = ticket.getPayload();

    console.log(tokens);
    console.log(profile);

    // try {
    //   const data = await axios.post("https://oauth2.googleapis.com/token", {
    //     code: body.code,
    //     client_id: setting.GOOGLE_CLIENT_ID,
    //     client_secret: setting.GOOGLE_CLIENT_SECRET,
    //     redirect_uri: "http://localhost:4000/api/auth/google/redirect",
    //     grant_type: "authorization_code",
    //   });
    //   console.log(data);
    //   return data.data; // 
    // } catch (error) {
    //   console.error(error);
    //   return { error: "Internal Server Error" }; // 
    // }
  }
© www.soinside.com 2019 - 2024. All rights reserved.