如何保存&在进行OAuth2令牌刷新时重新提交请求?

时间:2013-07-25 16:59:46

标签: ruby-on-rails google-api oauth-2.0 google-oauth

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

通过获取refresh_token可以获得新的access_token,这是可以解决的。您可以在用户首次授权您的应用时询问offline access

您还可以使用Google提供的Ruby client library更轻松地管理OAuth2流程。

答案 1 :(得分:0)

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

仅当用户与Google有效会话时,立即流才会成功。如果情况并非如此,那么您必须发送用户在正常流程中重新进行身份验证。

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