在Rails 3.2中使用OmniAuth-Twitter需要OAuth :: Unauthorized 401授权

Mat*_*teo 16 twitter omniauth ruby-on-rails-3

我已经在StackOverFlow中实现了几种不同的策略,但到目前为止,似乎都没有影响抛出的错误:

OAuth::Unauthorized 401 Authorization Required

我正在关注Ryan Bates的RC#241,并点击"用Twitter登录"这一点,我收到了错误消息.我继续将响应路由添加到routes.rb此处列出的文件中:

routes.rb:

match 'auth/twitter/callback', to: 'user#update'
Run Code Online (Sandbox Code Playgroud)

认为错误可能是由回调函数引起的.同样的错误.看看我的dev.log节目:

Started GET "/auth/twitter" for 127.0.0.1 at 2014-09-16 18:52:08 -0600
(twitter) Request phase initiated.

OAuth::Unauthorized (401 Authorization Required):
oauth (0.4.7) lib/oauth/consumer.rb:216:in `token_request'
oauth (0.4.7) lib/oauth/consumer.rb:136:in `get_request_token'
omniauth-oauth (1.0.1) lib/omniauth/strategies/oauth.rb:29:in `request_phase'
omniauth-twitter (1.0.1) lib/omniauth/strategies/twitter.rb:60:in `request_phase'
omniauth (1.2.2) lib/omniauth/strategy.rb:215:in `request_call'
omniauth (1.2.2) lib/omniauth/strategy.rb:183:in `call!'
omniauth (1.2.2) lib/omniauth/strategy.rb:164:in `call'
omniauth (1.2.2) lib/omniauth/builder.rb:59:in `call'
...
script/rails:6:in `require'
script/rails:6:in `<top (required)>'
-e:1:in `load'
-e:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)

所以我知道问题在于Twitter的认证问题.必须是KEY和SECRET,对吧?

现在,我已将KEY和SECRET作为ENV []变量,作为environment/development.rb文件的直接字符串,取出"ENV []"变量等,根据堆栈中的建议.

我的KEY和SECRET现在位于这里讨论的自定义配置中......

config/initializers/social_media.rb:

TWITTER_CONFIG = YAML.load_file("#{::Rails.root}/config/twitter.yml")[::Rails.env]
Run Code Online (Sandbox Code Playgroud)

config/initializers/omniauth.rb文件中:

OmniAuth.config.logger = Rails.logger

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :twitter, TWITTER_CONFIG['app_id'], TWITTER_CONFIG['secret']
end   
Run Code Online (Sandbox Code Playgroud)

ActionController: Exception caught OAuth::Unauthorized - 401 Authorization Required什么想法吗?这可能是Noob错误,但我的Google-Fu现在只是Google-F'ed ...

Mat*_*teo 56

经过一夜撕裂我的头发之后,我开始查看Twitter开发者控制台上的回调网址.

省去一些麻烦,别忘了设置它.它并没有直接在RailsCast中提及,尽管Ryan确实简单地通过了它.

设置回调URL时,不要只是将//localhost:3000其设置为无效.而是使用:

http://127.0.0.1:3000/
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,指定了回调URL但我的源web应用程序使用[oauth动态设置](https://github.com/intridea/omniauth/wiki/Setup-Phase)并且需要传递自定义回调URL.但是在我的推文设置中,我选中了"启用回调锁定"选项(因为它是Twitter推荐的),我开始收到这个401错误.我未选中选项`启用回拨Locking`和AUTH开始工作. (3认同)