oauth2.0 如何使用新的Google API与作用域?

8yparm6h  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(127)

对于一个uni项目,我试图创建一个简单的演示React应用程序,它将从Google帐户获取一些数据-首先是基本的东西,如名称和头像,然后是来自Google Fit API的“范围数据”。
第一部分花了大约10分钟,但第二部分花了我几个小时,我完全没有得到任何东西。我读了How user authorization works和整个Authorizing for Web部分,但我只是结束了什么-我可能知道什么是 * 授权代码模型 *,但我如何编写它?我把代码放在哪里?我如何调用谷歌适合API后?
也许有一些我错过的资源可以解释这一点?
我用通常的方法尝试过的大多数事情-搜索互联网或询问GPT -都以 “您创建了一个新的客户端应用程序,该应用程序使用已弃用的库进行用户身份验证或授权"结束。 我能够使登录按钮具有两种变体,一种是access_token,另一种是credentials
第一个是从@react-oauth/google使用useGoogleLogin方法,它给了我一个access_token。当我定义scope时,登录失败,弹出窗口写着“出错,请再试一次”或smth。

const signIn = useGoogleLogin({
     clientId: GOOGLE_CLIENT_ID,
     redirect_uri: 'http://localhost:3000',
     ux_mode: 'redirect',
     onSuccess: setCred, // useState setter
     onError: (err) => console.error('Google Error:', err),
     onFailure: (err) => console.error('Google Error:', err),
     //scope: 'https://www.googleapis.com/auth/fitness.activity.read',
});

字符串
然后我试着跟踪this tutorial on YouTube,它给了我credentials-从中我能够获得配置文件信息。这很好,但这就是它的结束。根据文档,登录(身份验证)和权限(授权)是两个独立的事情,我没有获得任何成功。

useEffect(() => {
  /* global google */
  google.accounts.id.initialize({
       client_id: GOOGLE_CLIENT_ID,
       callback: (res) => {
            if (res.error)
                 return console.error('Google Error:', res.error);
            console.log(res);
            setCred(res.credential); // useState setter
       },
  });

  google.accounts.id.renderButton(
       document.querySelector('#google-login'),
       {
            theme: 'outline',
            size: 'large',
       }
  );
}, []);


我试着在某个地方使用googleapis作为read的专用后端,但这些尝试都没有成功-我的参数从来没有完全符合Google的要求。

ykejflvf

ykejflvf1#

所以我最近在尝试制作一个没有后端的Web应用程序时也遇到了这个问题(只是使用@tanstack/react-query并纯粹在前端调用API),从中我也偶然发现了@react-oauth/google包。
我通过使用access_token成功地使 * 隐式流 * 工作,如下所示:

const login = useGoogleLogin({
  scope: [
    "openid",
    "https://www.googleapis.com/auth/userinfo.profile",
    "https://www.googleapis.com/auth/userinfo.email",
    "https://www.googleapis.com/auth/calendar.readonly",
  ].join(" "),

  onSuccess: setAuth,
})

// Somewhere in the app
const url = "https://www.googleapis.com/calendar/v3/colors" // example
const response = await fetch(url, {
  headers: {
    // ...
    Authorization: `Bearer ${auth.access_token}`,
  },
})

字符串
软件包所有者解释一些重要内容的相关GH问题:https://github.com/MomenSherif/react-oauth/issues/12#issuecomment-1131408898
至于添加范围时的错误,可能是您在某处错误地配置了Google Cloud OAuth consent screen
另外,如果你错过了,你可以去这里更好地理解 *auth流程 *:https://react-oauth.vercel.app/

相关问题