我已经在StackOverFlow中实现了几种不同的策略,但到目前为止,似乎并没有影响被抛出的错误:
的OAuth ::未经授权
需要401授权
我正在追踪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 []变量,作为环境/ development.rb文件的直接字符串,取出“ENV []”变量等,按照Stack over Stack的建议.
我的KEY和SECRET现在位于自定义配置中,如here…所述
配置/初始化/ 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的想法:异常已被OAuth :: Unauthorized – 401授权?这可能是一个Noob错误,但我的Google-Fu现在只是Google-F’ed …
解决方法
经过一个晚上撕裂我的头发,我看了
Twitter developer console的回叫网址.
保存自己一些麻烦,不要忘了设置这个.在RailsCast中没有直接提及,虽然Ryan简单地通过了它.
当你设置回调URL时,不要只是把// localhost:3000它不起作用.而是使用:
http://127.0.0.1:3000/