1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Omniauth+Omniauth-twitterの実装の時に出たエラー400,401,403の原因まとめ

Last updated at Posted at 2019-01-19

#エラーについてのまとめ
今回はじめて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でファイルを作成し追記する。

.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

エラーについての参考
https://mrkmyki.com/2018/12/02/twitter%E3%81%AEoauth%E3%81%A7400%E3%80%81401%E3%80%81403%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%8C%E5%87%BA%E3%82%8B%E5%8E%9F%E5%9B%A0%E3%81%BE%E3%81%A8%E3%82%81/

dotenv-railsについての参考
http://shimadays.com/2018/07/22/railsdotenv/
http://vdeep.net/rubyonrails-dotenv

direnvについての参考
https://qiita.com/tkmiya34/items/875742eb56ebe54d8828

1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?