javascript - 如何获取 React Native GoogleSignIn 的 accessToken?
问题描述
我无法获得 accessToken,我需要在我的后端 api 中使用它。
当我尝试这个时,
googleLogin = () => {
GoogleSignin.signIn()
.then((data) => {
console.log("TEST "+JSON.stringify(data));
var postData = {
access_token: data.accessToken,
code: data.idToken,
};
let axiosConfig = {
headers: {
'Content-Type': 'application/json',
"Accept": "application/json",
}
};
....
//Backend api axios call
....
})
.then((user) => {
console.log("TEST G LOGIN 1 "+JSON.stringify(user))
})
.catch((error) => {
console.log("....."+JSON.stringify(error))
});
}
得到了这个回应,它不包括
accessToken
{
"scopes": ["https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email", "https://www.googleapis.com/auth/drive.readonly"],
"serverAuthCode": "4/jwE5LLLLLLa7-f33333jmMD2V978oyp44444eb9yGe_qhHnkXXXXXXXLFXKZlQdDzlH-iIJx_gzqlLLLLLL3Q0PP0",
"idToken": "...v65a4MCC-ZUQmys_wf_DoCOBJEMuI........",
"user": {
"photo": "https://lh3.googleusercontent.com/-tLLLLLyeS0KE/AAAMMMMAAAI/AAAAAAAAAAA/ACHi3reMhihoeTe_6NjL666666EUVU82Q/s96-c/photo.jpg",
"email": "test@gmail.com",
"familyName": "tech",
"givenName": "test",
"name": "testtech",
"id": "11688888817288868"
}
}
根据文档
getTokens() 使用包含 { idToken: string, accessToken: string, } 的对象解析或拒绝错误。请注意,不鼓励使用 accessToken。
所以,我试过这个
GoogleSignin.Sign({
....
var gettoken = GoogleSignin.currentUserAsync(data.user).then((token) => {
console.log('USER token', token);
}).done();
...
})
它出错了,也试过了const token = GoogSignIn.getTokens()
,它返回null
。
package.json 信息
{
...
"react": "16.8.3",
"react-native": "0.59.9",
"react-native-firebase": "5.3.1",
"react-native-google-signin": "^2.0.0"
...
}
请建议获取 accessToken 的程序。
解决方案
最后我得到了accessToken。
第 1 步:- 我在 goolge 开发者控制台中删除了所有生成的 clidenId(只保留我在我的 web 项目中使用的 web 应用程序 clientId),并且还删除了 firebase 项目中的 android 应用程序。
第 2 步:-
在 firebase 中创建新的 android 应用并下载 google-services.json 并将其粘贴到android/app/google-services.json
第 3 步:- 从 google-services.json 的这一部分复制 clidenId
...
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "xxxxxxx-xxxxx.apps.googleusercontent.com", //<--- copied this clientID
"client_type": 3
},
{
"client_id": "XXXXXXXXXX-fBBBBBBBBBBBBBBBBBBBBBBBBpugnhrade.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "com.projectios"
}
}
]
}
}
...
并粘贴
GoogleSignin.configure({
webClientId: 'paste it here',
});
第 4 步:- 这是获取 accessToken 的代码(但此代码在我之前的 google-services.json 文件中不起作用)
googleLogin = () => {
GoogleSignin.signIn()
.then((data) => {
console.log("TEST " + JSON.stringify(data));
const currentUser = GoogleSignin.getTokens().then((res)=>{
console.log(res.accessToken ); //<-------Get accessToken
var postData = {
access_token: res.accessToken,
code: data.idToken,
};
let axiosConfig = {
headers: {
'Content-Type': 'application/json',
"Accept": "application/json",
}
};
-----
backend api call
-----
});
})
.then((user) => {
console.log("TEST G LOGIN 1 " + JSON.stringify(user))
})
.catch((error) => {
console.log("....." + JSON.stringify(error))
});
}
推荐阅读
- jquery - 通过日期选择器禁用自定义下拉时间+如果在禁用时间前一天禁用了一天
- python - 在 lambda 语句中的 for 语句中使用 if else 语句
- android - Flutter 列显示 Android 中小部件之间的额外空间
- javascript - 表格行 (JS) 的编辑/保存按钮的可见性问题
- discord.py - 如何在 discord.py 中发出 ping 命令?
- xml - xsd:sequence: 发现问题开始于:simpleType
- c# - C# CopyBlock 与 CopyBlockUnaligned 用例
- javascript - 如何将其转换为在用户更改下拉框时触发的回调?
- c# - 位图加载内存增加 10 倍文件大小
- c# - Xamarin 发送 IR 信号 (Android)