Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 通过在ruby中打开浏览器获得响应?_Ruby On Rails_Ruby_Oauth 2.0_Onedrive - Fatal编程技术网

Ruby on rails 通过在ruby中打开浏览器获得响应?

Ruby on rails 通过在ruby中打开浏览器获得响应?,ruby-on-rails,ruby,oauth-2.0,onedrive,Ruby On Rails,Ruby,Oauth 2.0,Onedrive,我使用的是ruby-v2.1.5 我正在尝试使用onedrive API在我的web应用程序中授权我的用户(oAuth2) 我正在遵循中指定的步骤 我通过以下步骤获得了auth_url require 'rubygems' require 'skydrive' class LivePartnerApp client_id = "MY_CLIENT_ID" client_secret = "MY_CLIENT_SECRET" call_back_url = "http://sample.sa

我使用的是ruby-v2.1.5

我正在尝试使用onedrive API在我的web应用程序中授权我的用户(oAuth2)

我正在遵循中指定的步骤

我通过以下步骤获得了auth_url

require 'rubygems'
require 'skydrive'

class LivePartnerApp 

client_id = "MY_CLIENT_ID"
client_secret = "MY_CLIENT_SECRET"
call_back_url = "http://sample.samplewebsite.com/"


oauth_client = Skydrive::Oauth::Client.new(client_id, client_secret, call_back_url, "wl.skydrive_update,wl.offline_access")
puts "oauth_client --- #{oauth_client.inspect}"
auth_url = oauth_client.authorize_url
puts "auth_url - #{auth_url.inspect}"

response = system("open", "#{auth_url}")

puts "response #{response.inspect}"
end
当我尝试运行此文件时。我得到了oauth_客户端和auth_url的正确响应

而且

正确打开我的浏览器并重定向到我的重定向url

但我的问题是, 在这个重定向步骤之后,我必须获得一个代码,使用该代码我应该获得一个访问令牌

但是上面的响应变量仅返回,具体取决于重定向的成功与否

有人能建议一种在ruby中以编程方式获取此代码的方法,以便我可以使用它来获取访问令牌吗


提前谢谢

这是因为您使用
system
调用命令行(即shell):
system
不返回命令行结果,它只返回true或false。看看

我通常使用反勾号

response = `open #{auth_url}` 

我试着使用上面的代码。但是ruby将auth_url作为文件名,并且没有显示这样的文件或目录错误。我认为您的问题可能是您在ruby运行时加载了大量skydive内容,然后使用“system”执行shell命令。系统命令运行的环境只是您的基本命令行环境—它不会包含所有的skydive功能。您不应该使用oauth_客户机对象的某些方法而不是执行系统调用吗?
response = `open #{auth_url}`