我已经在StackOverFlow中实现了几种不同的策略,但到目前为止,似乎都没有影响抛出的错误:
OAuth::Unauthorized
401 Authorization Required
我正在关注Ryan Bates' RC #241,并点击了我的网站点击"使用Twitter登录"我得到了错误。我继续将响应路由添加到此处列出的routes.rb
文件中:
routes.rb
match 'auth/twitter/callback', to: 'user#update'
认为错误可能是由回调函数引起的。同样的错误。查看我的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>'
所以我知道问题在于Twitter的认证问题。必须是KEY和SECRET,对吧?
现在,我已将KEY和SECRET作为ENV []变量放入environment/development.rb
文件的直接字符串中,取出&#34; ENV []&#34;变量等,根据堆栈上的建议。
My KEY和SECRET现在位于here...
所讨论的自定义配置中 config/initializers/social_media.rb:
TWITTER_CONFIG = YAML.load_file("#{::Rails.root}/config/twitter.yml")[::Rails.env]
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
关于ActionController: Exception caught OAuth::Unauthorized - 401 Authorization Required
的任何想法?这可能是Noob错误,但我的Google-Fu现在只是Google-F&#39;
答案 0 :(得分:55)
经过一夜撕裂我的头发之后,我开始查看Twitter developer console上的回调网址。
省去一些麻烦,别忘了设置它。它并没有直接在RailsCast中提及,尽管Ryan确实简单地通过了它。
设置回调网址时,不要只放//localhost:3000
它不起作用。而是使用:
http://127.0.0.1:3000/
答案 1 :(得分:0)
我在使用 omniauth-twitter 和 devise gems 处理 Rails 6 应用程序时遇到了同样的问题
我已将 API Key
和 API Secret Key
添加到我的 Rails 6 应用程序中,但是当我尝试测试 Twitter 身份验证时,我遇到了以下错误:< /p>
OAuth::Unauthorized 401 Authorization Required
我是这样解决的:
我将以下回调 URL 添加到我的 Twitter 开发者帐户:
http://localhost:3000/auth/twitter
http://localhost:3000/auth/twitter/callback
http://localhost:3000/users/auth/twitter
http://localhost:3000/users/auth/twitter/callback
注意:将 localhost:3000
替换为您的实际 host
。此外,用于回调 URL 的路由应与您的应用程序中设置的路由相匹配。
资源:How to Sign in with Twitter using Devise, Omniauth, and Ruby on Rails
仅此而已。
我希望这会有所帮助