我创建了一个 gem 来使用 Box API V2 (https://github.com/youpdidou/omniauth-box/)。我在开发中对其进行了测试。身份验证是根据需要创建并记录在数据库中的,但是在过程结束时重定向到我的页面时出错(参见下面的.log)。
我的应用程序与其他提供商配合使用正常(我有 Twitter 和 Yammer,使用 omniauth-Twitter 和 omniauth-yammer gem),所以似乎错误可能是我的 Gem 中缺少的东西(与刷新令牌有关的东西?),或者它可能与以下事实有关 Box 身份验证过程有 2 个步骤(1 个用于凭据, 1 授权访问文件 - 参见 http://developers.box.com/oauth/)...
我在这里错过了什么?如何调试它,我应该看什么?
(box) Callback phase initiated.
Started GET "/auth/box/callback?state=7d550f7c0d367d4af73ca3a1d82985c78730126887e3e813&code=fV19In0Elnq1GNX61t32N1h8anezbTiH" for 127.0.0.1 at 2013-01-30 00:28:18 -0800
Processing by AuthenticationsController#create as HTML
Parameters: {"state"=>"7d550f7c0d367d4af73ca3a1d82985c78730126887e3e813", "code"=>"fV19In0Elnq1GNX61t32N1h8anezbTiH", "provider"=>"box"}
User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Authentication Load (0.5ms) SELECT `authentications`.* FROM `authentications` WHERE `authentications`.`user_id` = 1 AND `authentications`.`provider` = 'box' AND `authentications`.`uid` = '288560' LIMIT 1
(0.1ms) BEGIN
SQL (0.3ms) INSERT INTO `authentications` (`created_at`, `oauth_secret`, `oauth_token`, `provider`, `uid`, `updated_at`, `user_id`) VALUES ('2013-01-30 08:28:19', NULL, NULL, 'box', '288560', '2013-01-30 08:28:19', 1)
(1.5ms) COMMIT
(0.1ms) BEGIN
(0.4ms) UPDATE `authentications` SET `oauth_token` = 'cZga3uA89eslNAURbJlZaySukIs9IxTF', `updated_at` = '2013-01-30 08:28:19' WHERE `authentications`.`id` = 26
(0.5ms) COMMIT
Redirected to http://localhost:3000/services
Completed 302 Found in 14ms (ActiveRecord: 3.7ms)
[2013-01-30 00:28:19] ERROR Errno::ECONNRESET: Connection reset by peer
/Users/alex/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:80:in `eof?'
/Users/alex/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpserver.rb:80:in `run'
/Users/alex/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
我认为这与盒子无关,而是轨道本身,您可能需要查看:错误错误::ECONN重置:对等方重置连接因为这个人似乎有足够接近与您完全相同的错误。
编辑以包括答案:引自@Matt·史密斯
我的快速猜测是,这看起来您的会话有问题,protect_from_forgery正在发挥作用。
我遇到了类似的问题,把头撞在墙上几天,结果是我将整个对象分配给会话对象,而不仅仅是 id。快速说明,非GET请求是触发protect_from_forgery的请求。
我在非rails应用程序中遇到了类似的问题。就我而言,我在客户端上执行了一些 ajax 请求,然后重定向到框身份验证页面,而无需等待服务器完成请求。
使用承诺并在请求完成后重定向解决了该问题。像这样:
$.ajax(my_url, {dataType: "json"}).then(function(data){window.location.replace(auth_url)};
希望你在这里找到一些灵感。