「パーフェクト 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になった。
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でログインできた。
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の結果
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の結果
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認証時にエラーが出たんだと納得。