【发布时间】:2017-05-31 09:13:28
【问题描述】:
我有一个仅限 Rails 5 API 的应用程序和一个 Angular JS 前端应用程序,并希望与 Asana API 集成。我正在使用 ruby-asana、omniauth 和 omniauth-asana 宝石。
我使用 Asana 的 JS library 开始请求,如下所示:
var client = Asana.Client.create({
clientId: 172706773623703,
clientSecret: '<client_secret>',
redirectUri: '<redirect_url>'
});
client.useOauth({
flowType: Asana.auth.PopFlow
});
上面确实将我重定向到我可以登录的 Asana。在redirectUri 上,我提供了一个后端路由(仅限Rails 5 API),该路由应该处理身份验证的剩余部分(仅使用JS 我只得到一个不能自我更新的临时令牌,这意味着用户必须对每个令牌过期的时间。如果我正确理解了文档)。
因此,在我为处理路由而创建的控制器上,我有以下内容(来自 Asana 文档中的示例):
require 'omniauth-asana'
use OmniAuth::Strategies::Asana, <secret>, <secret>
creds = request.env["omniauth.auth"]["credentials"].tap { |h| h.delete('expires') }
strategy = request.env["omniauth.strategy"]
access_token = OAuth2::AccessToken.from_hash(strategy.client, creds).refresh!
$client = Asana::Client.new do |c|
c.authentication :oauth2, access_token
end
现在,上述方法不起作用,因为 1) 没有 request.env,因为这是一个仅限 API 的应用程序,所以我按照 Omniauth 上的说明进行操作,并将以下内容添加到我的 config/application.rb:
config.session_store :cookie_store, key: '_interslice_session'
config.middleware.use ActionDispatch::Cookies # Required for all session management
config.middleware.use ActionDispatch::Session::CookieStore, config.session_options
现在,在request.headers 我有_interslice_session,其中有一些数字。如何使用以上内容创建Asana client?
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails ruby api asana