ゆうなんとかさんの雑記帳的な。

Twitterで踊ったり音ゲーしたりしてるあの名前がよくわからない人が書いてるらしいよ。

RailsでOAuthプロバイダーを作れるプラグインを見つけたけどそのままだとうまく動かなかった件について

ちょっとわけあって調査することになり、試しに動かしてみようと思ったらとんでもない泥沼でした。
ちなみにプラグインのリポジトリはこちらです。
pelle/oauth-plugin · GitHub
oauth2のGemがインストールされていれば、例によってGemfileに

gem 'oauth-plugin'

と書いたあとbundle installで使えます。

で、これなんですけどrails generateしただけで使えるようにならないらしく*1、最低限動かせるまでの間にひと手間かかるのは承知だったのですが、説明のとおりやっただけけでは足りませんでした。認証関係で必要なGem*2があったのでbundle installし直したり、エラーログを見ながら足りないattr_accessibleとかを足したりしていく作業が結構必要です。
そして最後まで謎だったのが

Association named 'client_applications' was not found; perhaps you misspelled it?

というエラー。User#tokensを見ようとrails consoleでコンソールから確認しても容赦なく現れ、client_applicationsと一見正しそうな名前なのになぜかエラーが出るという極悪非道さで気力を削ってくれました。結局原因はここ。

has_many :tokens, class_name: "Oauth2Token", order: "authorized_at desc", include: [:client_applications] #修正前
has_many :tokens, class_name: "Oauth2Token", order: "authorized_at desc", include: [:client_application]  #修正後

includeするときに単数形が正解のところ複数形だったことだとわかったのが今しがた。ここまでhas_manyにたくさんオプションを書かないので原因が分かるまでにとても時間がかかりました。

*1:大変なのはわかるけど自動生成されているモデルにattr_accessible足りないのとかはもう少しなんとか頑張ってほしかったです…

*2:まあDeviseとかDeviseとかDeviseとかですね