LoginSignup
6

More than 5 years have passed since last update.

Rails + tiwtter loginで OAuth::Unauthorized 400 Bad Requestになった件

Last updated at Posted at 2015-11-27

「パーフェクト Ruby on Rails」のサンプル6章 p168 - p179のログイン処理を書いているときにはまったのでメモ

環境

OS:OS X Yosemite(10.10.5)
Ruby:ruby 2.2.1p85
Rails:4.1.1'

現象

config/secrets.ymlの内容が以下の場合に、サンプル画面(p175 下段図 6.10]のtwitterでログインをクリックすると

OAuth::Unauthorized 400 Bad Requestになった。

config/secrets.yml
default_twitter: &default_twitter
  twitter_api_key: 'dummy api key'
  twitter_api_secret: 'dummy api secret'

development:
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
<<: *default_twitter

test:
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
<<: *default_twitter

パーフェクトRuby on Railsのサンプルを落としてきて、diffを取りsecrets.ymlを以下の様に「<<: *default_twitter」の前に半角スペースを二つ入れて修正したらtitterでログインできた。

config/secrets.yml
default_twitter: &default_twitter
  twitter_api_key: 'dummy api key'
  twitter_api_secret: 'dummy api secret'

development:
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  <<: *default_twitter

test:
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  <<: *default_twitter

他の方に役立つかどうか分かりませんが、とりあえず自分へのメモ

半角スペースが一つの場合はどうなるんだろう。=> WEBrick起動時にエラーになった。

そもそもなんでスペースがないと駄目なんだろう
=> マッピング(ハッシュ形式)の書き方でsecret_key_baseと<<がdevelopmentのキーになっているから半角スペースを二つ入れているということかな?

YAML Validatorを使うと二つの結果に違いがありました。

エラーになった場合のYAML Validatorの結果

config/secrets.yml
default_twitter: 
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"
development: 
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
test: 
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
twitter_api_key: "dummy api key"
twitter_api_secret: "dummy api secret"

エラーにならなかった場合のYAML Validatorの結果

config/secrets.yml
default_twitter: 
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"
development: 
  secret_key_base: 46b554f82bxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"
test: 
  secret_key_base: ea9e9c31d1b1b38250afdxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  twitter_api_key: "dummy api key"
  twitter_api_secret: "dummy api secret"

前者の場合developmentとtestにtwitter_api_keyとtwitter_api_secretが含まれていなかったのでtwitter認証時にエラーが出たんだと納得。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6