对于一个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的要求。
1条答案
按热度按时间ykejflvf1#
所以我最近在尝试制作一个没有后端的Web应用程序时也遇到了这个问题(只是使用
@tanstack/react-query
并纯粹在前端调用API),从中我也偶然发现了@react-oauth/google
包。我通过使用
access_token
成功地使 * 隐式流 * 工作,如下所示:字符串
软件包所有者解释一些重要内容的相关GH问题:https://github.com/MomenSherif/react-oauth/issues/12#issuecomment-1131408898
至于添加范围时的错误,可能是您在某处错误地配置了Google Cloud OAuth consent screen?
另外,如果你错过了,你可以去这里更好地理解 *auth流程 *:https://react-oauth.vercel.app/