#エラーについてのまとめ
今回はじめてomniauth-twitterを使った結果、エラーにすごい手間取ったのでまとめておきました。
私の場合は「環境変数の設定」と「TwitterのCALLBACKURL」が原因でした。
##400 Bad Request
このエラーの原因は「正しく環境変数が設定されていないこと」でした。
(環境変数の管理にはGem「dotenv-rails」を使用しています)
omniauth.rbファイルの記述を修正
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, 'APP_ID', 'APP_SECRET'
end
上から下へ変更
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, ENV['APP_ID'], ENV['APP_SECRET']
end
変更点:ENV[]を追加した。
ENV['APP_ID'], ENV['APP_SECRET']
に正しく変数が入っているか確かめるにはrails c
を起動しENV['APP_ID']
と入力すればよい。twitter_keyがかえってこれば成功。""だときちんと設定できていない。環境変数設定ファイルを確認する。
(あたりまえだけど自分が使ってるGemの正しい記述方法調べなきゃいけない。コピペ三昧だと忘れがちになるから気を付けたい)
##401 Authorization Required
原因は「環境変数を正しく設定できていないこと」か「TwitterのCallBackURLを正しく設定できていない」という原因が考えられると思う。
###環境変数を正しく設定する
Gem「dotenv-rails」の環境変数設定ファイルは**.env**
sudo vi .env
でファイルを作成し追記する。
APP_ID=(ここにTwitterキー)
APP_SECRET=(ここにTwitterキー)
おそらくクオーテーションで囲む必要ないです。書かなくとも動いた。
記述が終わったら:wq
で保存。
ちなみに、ファイルを作成したのちAtomエディタで編集して保存しようとしても権限がないと保存されなかったことに気づかずに原因がわからずハマっていました。
vimの使用初めてでわからなかったので基本的なことだけまとめてます。(URLの記事で使ってるのは「dotenv-rails」でなく「direnv」です。)
https://qiita.com/Takka_Log/items/7d03ec8f535b3b6c3e8f
###追記:時刻を合わせる
エラーを解決した数日後再び401 Authorization Requiredが発生したので追記しておく。
とりあえず心当たりは時刻のずれだったので修正しようと思った。
時刻に関してはかなり厳しい?らしく数秒のずれも見逃してくれないらしい。
####PC本体の時刻を合わせる。
まずこのサイトで時刻が正しいかどうか確かめる。
(私の時刻のずれは1.7秒ほどだった。)
【Windowsの場合】
[コントロールパネル]→[時計と地域]→[日付と時刻の設定]→[インターネット時刻]→[設定の変更]→「ntp.nict.jp」と設定する。
上手く反映されなかった場合は、手動で一分か一時間ほど時刻をわざとずらしてから、それを修正する形でもう一度時刻同期する、というのを繰り返していたらうまくいくと思う(結構乱暴だったかなとは思ってる)
最後にもう一度、上のサイトで時刻にずれがないか確認する。(ちなみに誤差がないと「合っています」と表示されます)
####仮想マシンの時刻を合わせる。
この記事を参考に進めてみた。
そのあとhwclock --systohc
を実行しハードウェアクロックをシステムクロックに合わせた。
sudo ntpdate ntp.nict.jp
コマンドが反映されない場合一度ntpdを停止すること
sudo /etc/init.d/ntpd status
sudo /etc/init.d/ntpd stop
##Unauthorized 403 Forbidden
これの原因はTwitterアプリのCallBackURLのミスです。
私の場合は下のように書きました。
http://192.168.33.15:3000/auth/twitter/callback
http://192.168.33.15:3000/auth/twitter
ちなみに上のURLから**:3000**が抜けていることに気が付かないまま2日ほど過ごしました(南無
#参考記事
具体的な記述についての参考
https://qiita.com/white0221/items/19d18a4e494c4cb68dae
dotenv-railsについての参考
http://shimadays.com/2018/07/22/railsdotenv/
http://vdeep.net/rubyonrails-dotenv
direnvについての参考
https://qiita.com/tkmiya34/items/875742eb56ebe54d8828