- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 omniauth-coinbase和 coinbase-ruby在我的 Rails 应用程序中。
在我的应用程序中,用户通过 Coinbase 登录,Coinbase 生成一个 code
,然后我将其转换为一个 access_token
和一个 refresh_token
。
然后我在变量 coinbase
下创建了一个新的 OAuth 客户端,它具有完整的功能。
user_credentials = {
:access_token => access_token,
:refresh_token => refresh_token,
:expires_at => Time.now + 1.day
}
coinbase = Coinbase::OAuthClient.new(ENV['COINBASE_CLIENT_ID'], ENV['COINBASE_CLIENT_SECRET'], user_credentials)
这里是问题开始的地方:
我将 access_token
和 refresh_token
作为字符串存储在用户模型上,这样当用户回来时,我可以使用两个事件 token 或使用refresh_token
生成两个新 token ,如 here 部分所述“访问 token 和刷新 token ”
Coinbase 公开了一个refresh!
方法,我可以在我的 coinbase
OAuth 实例上调用它,应该给我两个新 token 。
refresh!
在我生成新的 OAuth 客户端后正常工作,但是当我从用户模型的数据库中提取现有 token (有效或无效)时不,创建如上所述的 user_credentials
哈希,实例化一个新的 OAuth 客户端,然后对其调用 refresh!
。
根据我的研究,access_token
已过期。我每次都使用 refresh_token
来获取新的 access_token
和新的 refresh_token
。所以在我看来,我应该能够实例化一个新的 OAuth 客户端,给它两个 key 并运行 refresh!
让我回到工作状态并能够对 Coinbase API 进行有效调用。
任何人都可以在这里帮助我可能做错了什么吗?谢谢!
我从 refresh!
得到的错误如下:
OAuth2::Error: invalid_request: The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed.
{"error":"invalid_request","error_description":"The request is missing a required parameter, includes an unsupported parameter value, or is otherwise malformed."}
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/oauth2-0.9.4/lib/oauth2/client.rb:113:in `request'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/oauth2-0.9.4/lib/oauth2/client.rb:138:in `get_token'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/oauth2-0.9.4/lib/oauth2/access_token.rb:86:in `refresh!'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/coinbase-2.0.0/lib/coinbase/oauth_client.rb:58:in `refresh!'
/Users/zackshapiro/dev/stopcoin/lib/tasks/short.rake:14:in `block (3 levels) in <top (required)>'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:46:in `each'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/gems/activerecord-4.1.0/lib/active_record/relation/delegation.rb:46:in `each'
/Users/zackshapiro/dev/stopcoin/lib/tasks/short.rake:6:in `block (2 levels) in <top (required)>'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/bin/ruby_executable_hooks:15:in `eval'
/Users/zackshapiro/.rvm/gems/ruby-2.0.0-p451/bin/ruby_executable_hooks:15:in `<main>'
最佳答案
通过自己实现它,我既能够重现所描述的异常,也能够创建工作代码。
为了重现所描述的异常,我不得不使用旧标记。尝试再次刷新时,这始终会产生 401 NOT AUTHORIZED
HTTP 响应。这是通过在我自己的刷新代码中实现错误而偶然发生的。虽然我已经成功地保留了从 OAuth 重定向返回的 token ,但是一旦我刷新了一次新 token ,我就忘记了将新 token 保留回模型。 注意:刷新 token 会给您一个新的 access_token
和 refresh_token
。
接下来,我最终得到的工作代码如下:
def test_refresh
@old_tokens =
{
:access_token => current_user.access_token,
:refresh_token => current_user.refresh_token
}
client =
Coinbase::OAuthClient.new \
Rails.application.secrets.coinbase_api_key,
Rails.application.secrets.coinbase_api_secret,
@old_tokens
new_token = client.refresh!
@new_tokens =
{
:access_token => new_token.token,
:refresh_token => new_token.refresh_token
}
current_user.access_token = @new_tokens[ :access_token ]
current_user.refresh_token = @new_tokens[ :refresh_token ]
current_user.save!
end
token 在底部被持久化返回给用户,防止使用旧的/过期的 token 。
最后,这可能是 this question 的副本, 尽管它不那么具体。
关于ruby-on-rails - 在用户模型上存储 access_token 和 refresh_token 并再次使用它们会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983741/
我正在与一个显然需要 OAuth 身份验证的自定义 APEX 服务进行交互。我可以轻松地对我的应用程序进行身份验证和授权。一切正常。 但是,我收到的访问 token 往往会过期。 当然,我可以通过发送
我有一个使用 oauth2 连接到第三方应用程序的 C# 应用程序。首先,用户被重定向到一个外部应用程序 (ERP),他在其中输入用户名和密码,并生成一个有效期为 1 小时的访问 token 和一个有
我对 refresh_token 有疑问。我完全不明白。我读到我只在登录后第一次获得此 token ,之后不会返回 refresh_token。第一种方法是初始化 gapi: initGp: func
我有一个有两条路由的小型 express 服务器。然后它将 json token 写入文件(我知道非常不安全)。由于某种原因,没有 refresh_token。在文档中有一条评论说 offline f
我将 google API 用于个人项目,因此我的应用没有通过 google 验证。 我完全使用 this我自己的代码示例和登录时生成的 token.json 文件。一切正常,每次我发出请求(每 10
背景 我使用 google-api-python-client django_sample 获得了 Google API 的 access_token . 为了离线访问,我添加了 FLOW.param
我写了一个关于使用 google api 的例子。 Google NodeJS Client library .我遵循了指令集 access_type : 'offline',但是返回的对象不包含 r
我在 IdentityServer 4 中使用 .net 核心。我有一个 Web api 和一个访问 api 上的安全端点的 MVC 应用程序。它的设置与 IdentityServer 快速入门非常相
我正在阅读 OAuth2 规范: https://www.rfc-editor.org/rfc/rfc6749#section-4.4.2 特别是关于 client_credentials 的部分授予
我在Grails 3应用程序中使用Spring Security Rest发出“refresh_token”请求时遇到了一些麻烦。我有一个同时具有Web前端和一些Rest端点的应用程序,其他所有东西似
我正在使用的项目:来自 nuget 的 ImgurNet(来源:https://github.com/0xdeafcafe/ImgurNet) 它似乎需要所有这些参数: { "client_i
我对 refresh_token 流程(http://wiki.developerforce.com/page/Digging_Deeper_into_OAuth_2.0_on_Force.com)的
您好,我是计算机科学专业的学生,正在 oauth.io 上做一些实验。但我在成功获取代码后获取刷新 token 时遇到问题。获取代码后,我正在编写以下代码行,但它给了我内部服务器错误.. 代码是
我正在使用 omniauth-coinbase和 coinbase-ruby在我的 Rails 应用程序中。 在我的应用程序中,用户通过 Coinbase 登录,Coinbase 生成一个 code,
所以我通过这种方式获得了一个刷新 token ,我可以保留它吗? 如果可以,下次要怎么用才能不用开浏览器? 现在我正在考虑直接创建 OAuth2Credentials 对象,这是正确的方法吗? fro
我将 HWIO Bundle 用于 google api,当我收到来自 google refreshToken = null 的响应时,为什么?如何刷新 token oAuthToken = {HWI
如果用户的 access_token 过期并且用户想保持登录状态,我需要让用户在系统中保持登录状态。如何在 Keycloak 上使用 refresh_token 获取新更新的 access_token
我的 axios 响应中有以下拦截器: window.axios.interceptors.response.use( response => { return response; }
我正在使用 FLask Framework 构建网站 + 后端我在其中使用 Flask-OAuthlib与谷歌进行身份验证。身份验证后,后端需要定期扫描用户的 Gmail。因此,当前用户可以验证我的应
根据 https://groups.google.com/forum/#!forum/oauth2-dev讨论现在在这里。 无论我读了多少书,我都无法理解 google OAuth2 token 的工
我是一名优秀的程序员,十分优秀!