我在一个应用程序中工作,它不断从GoogleFit API中提取一些与一些用户的步骤相关的信息。
我正在使用httr
包进行身份验证:
library(httr)
library(RGoogleFit)
google_client <- gargle::gargle_oauth_client_from_json("client_secret_xxx.apps.googleusercontent.com.json")
myapp <- httr::oauth_app(appname = "myapp", key = google_client$id, secret = google_client$secret)
# Opens a web browser for Google Authentication
google_token <- oauth2.0_token(oauth_endpoints("google"), myapp,
scope = "https://www.googleapis.com/auth/fitness.activity.read",
cache = "httr-oauth")
我得到了访问令牌和刷新令牌:
> google_token$credentials
$access_token
[1] "ya29.a0AWxxxxxxxxxxxxxxxx"
$expires_in
[1] 3599
$refresh_token
[1] "1//03RHPxxxxxxxxxxxxxxxxx"
$scope
[1] "https://www.googleapis.com/auth/fitness.activity.read"
$token_type
[1] "Bearer"
我需要不断地从API中提取数据。因此,在访问令牌到期后(一小时),我需要使用刷新令牌。
出于测试目的,我使用了一个while(true)
循环来查看一个小时后进程是否停止提取数据。
currentToken<-google_token$credentials$access_token
labelToken="current Token"
while(TRUE){
n<-GetFitDataset(currentToken,"derived:com.google.step_count.delta:com.google.android.gms:estimated_steps",as.POSIXct(as.Date("2023-05-01")),as.POSIXct(as.Date("2023-06-04")))
# When the token expires, the data is not extracted and n$point is null
if (is.null(n$point)) {
currentToken<-google_token$credentials$refresh_token
labelToken="refresh Token"
}
print(paste0(Sys.time()," ",labelToken," nrow ",nrow(n$point)))
Sys.sleep(60)
}
..一小时后刷新令牌似乎未被识别为有效。
经过一番调查,我发现了这个帖子:
然而,我没有找到足够的例子来说明如何使用httr::VERB
。
我如何使用它来解决我的问题?
谢谢!
2条答案
按热度按时间w1jd8yoj1#
刷新令牌用于请求新的访问令牌。不能使用刷新令牌代替访问令牌
wz8daaqr2#
我使用refresh_oauth2.0而不是
httr::VERB
解决了这个问题。下面是我的代码,但坏消息是
refresh_oauth2.0
每次access token
到期(一小时)时都会生成一个新的refresh token
。但是(如果我想的话)我可以只使用第一个生成的refresh token
来连续生成新的access token
7天。因此,许多refresh tokens
将没有任何目的地生成。我不确定这是不是一个坏习惯。编辑:06/06/2023正如John Hanley建议。应该使用新的刷新标记而不是旧的