0

我正在用 Rails 编写一个谷歌日历应用程序。OAuth2 访问令牌在 1 小时后过期。我的问题是,如果有人填写了我想推送到 Google 日历的表格,而他们在填写表格时访问令牌过期并且他们必须通过整个重新身份验证过程,我不知道如何保存整个请求(表单提交)并在我的令牌刷新后重新提交。

我知道可以使用数据库,保存参数、路径、请求方法等等......但我想要做的是将所有内容保存在某种会话变量中,并让它自动重新提交一旦 Google OAuth 访问令牌有效,再次向我的应用发出整个请求。

有任何想法吗?

4

2 回答 2

1

这可以通过得到一个refresh_token你可以得到一个新的access_token. 您可以通过在用户首次授权您的应用时请求离线访问来做到这一点。

您还可以使用 Google 提供的Ruby 客户端库来更轻松地管理 OAuth2 流程。

于 2013-07-25T21:40:37.397 回答
0

您还可以在当前会话中保存表单状态,假设您有一个,然后立即执行流程以获取新的访问令牌。查看 prompt=none 参数: https ://developers.google.com/accounts/docs/OAuth2Login#authenticationuriparameters

仅当用户与 Google 进行有效会话时,即时流程才会成功。如果不是这种情况,那么您必须让用户在正常流程中重新进行身份验证。

或者,正如 Arun 建议的那样,使用刷新令牌。但是使用刷新令牌,您肯定必须运行自己的会话并保留用户数据库(您必须存储刷新令牌)。您自己的会话也可能在表单提交之前过期。

于 2013-07-26T19:25:06.750 回答