This authorization code has been used

Rails4のoauth認証でハマった。

 

http://npb.somewhatgood.com/blog/archives/715

のサイトを参考にしてfacebookからoauthを使用してユーザー情報を取得しようとした。

しかし、csrf系のエラーが発生!

これは

 

Rails.application.config.middleware.use OmniAuth::Builder do
  provider :facebook,
    ENV['FACEBOOK_KEY'],
    ENV['FACEBOOK_SECRET'],
    :provider_ignores_state => true
end

provider_ignores_stateをtrueにすると回避出来るらしい。

 

しかし、その後もエラーでThis authorization code has been usedという、メッセージがfacebookから返ってくる。しかも一度目エラーが出て、ブラウザのバックボダンで戻って再度やると通る…

 

セッションとか、Facebook Develooperのアプリ設定が間違いがあるのではないかと、調べたが解決しない。

結局、新規アプリを作ってそこに組み込んでみて試して、今のアプリと比較したところ、現状のRailsアプリにはベーシック認証がかかっており、これを外すとちゃんと動作した。

エラーメッセージと原因がリンクしてなかったので、めちゃくちゃ時間がかかった。

もし、同じバグにあったら一度oauth認証ではベーシック認証を外してみることをおすすめする。