获取用户 Google 日历的权限以从服务器使用它们
Get permissions on user's Google Calendar to use them from server
要求:
我必须开发以下功能:用户单击我网站上的一个按钮,然后会弹出一个 Google 的对话框,为我的应用程序询问他的日历权限。如果用户接受 - 我的服务器应用程序(比如说 NodeJS)应该能够随时读取他的事件(不仅仅是 30 天)。
这是我试过的方法:
我正在学习这些教程(NodeJS 和浏览器)https://developers.google.com/calendar/quickstart/nodejs
NodeJS 教程为我提供了我的帐户权限(而我需要用户为其帐户提供权限)。
浏览器教程弹出对话框并请求权限。如果用户接受了请求,那么它最终只能在日历上获得 1 小时的许可(因此即使我可以使用服务器中的令牌也不能解决问题)。要检查它,只需稍微修改一下
,然后尝试从 handleAuthClick
打印 Promise 的结果
gapi.auth2.getAuthInstance().signIn().then(res => {console.log(res)});
看打印结果中的expires_in(或expires_at):
{
"El": "117770076845340691060",
"Zi": {
"token_type": "Bearer",
"access_token": "ya29.Glb...zr8Yx",
"scope": "https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email openid email profile",
"login_hint": "AJDLj...WlQ",
"expires_in": 3600,
"id_token": "eyJhvGciO...sHxw6HcA",
"session_state": {
"extraQueryParams": {
"authuser": "1"
}
},
"first_issued_at": 1528384733411,
"expires_at": 1528388333411,
"idpId": "google"
},
"w3": {
"Eea": "117770076845340691060",
"ig": "Bryan Gray",
"ofa": "Bryan",
"wea": "Gray",
"Paa": "https://lh3.googleusercontent.com/-zQ8KN1XZtJI/AAAAAAAAAAI/AAAAAAAAAAA/AB...e/s96-c/photo.jpg",
"U3": "alex@khealth.ai"
}
}
访问令牌只能使用一个小时。您需要一个刷新令牌,这样您就可以在需要时请求新的访问令牌。为此,您需要申请离线访问权限。
gapi.signin2.render('glogin', {
'class': 'g-signin',
redirect_uri: 'postmessage',
onsuccess: signInCallback,
cookiepolicy: 'single_host_origin',
accesstype: 'offline',
theme: 'dark'
});
此示例中的代码 Google oauth2
要求:
我必须开发以下功能:用户单击我网站上的一个按钮,然后会弹出一个 Google 的对话框,为我的应用程序询问他的日历权限。如果用户接受 - 我的服务器应用程序(比如说 NodeJS)应该能够随时读取他的事件(不仅仅是 30 天)。
这是我试过的方法:
我正在学习这些教程(NodeJS 和浏览器)https://developers.google.com/calendar/quickstart/nodejs
NodeJS 教程为我提供了我的帐户权限(而我需要用户为其帐户提供权限)。
浏览器教程弹出对话框并请求权限。如果用户接受了请求,那么它最终只能在日历上获得 1 小时的许可(因此即使我可以使用服务器中的令牌也不能解决问题)。要检查它,只需稍微修改一下
,然后尝试从handleAuthClick
打印 Promise 的结果
gapi.auth2.getAuthInstance().signIn().then(res => {console.log(res)});
看打印结果中的expires_in(或expires_at):
{
"El": "117770076845340691060",
"Zi": {
"token_type": "Bearer",
"access_token": "ya29.Glb...zr8Yx",
"scope": "https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/userinfo.email openid email profile",
"login_hint": "AJDLj...WlQ",
"expires_in": 3600,
"id_token": "eyJhvGciO...sHxw6HcA",
"session_state": {
"extraQueryParams": {
"authuser": "1"
}
},
"first_issued_at": 1528384733411,
"expires_at": 1528388333411,
"idpId": "google"
},
"w3": {
"Eea": "117770076845340691060",
"ig": "Bryan Gray",
"ofa": "Bryan",
"wea": "Gray",
"Paa": "https://lh3.googleusercontent.com/-zQ8KN1XZtJI/AAAAAAAAAAI/AAAAAAAAAAA/AB...e/s96-c/photo.jpg",
"U3": "alex@khealth.ai"
}
}
访问令牌只能使用一个小时。您需要一个刷新令牌,这样您就可以在需要时请求新的访问令牌。为此,您需要申请离线访问权限。
gapi.signin2.render('glogin', {
'class': 'g-signin',
redirect_uri: 'postmessage',
onsuccess: signInCallback,
cookiepolicy: 'single_host_origin',
accesstype: 'offline',
theme: 'dark'
});
此示例中的代码 Google oauth2