Railsで使えるGem

RailsでOAuthを使うには~OmniAuth

投稿日:

 

github.com/intridea/omniauth

 

OmniAuthの受け持つ役割

OmniAuthはOAuthという仕組みを使って外部のプロバイダ(TwitterとかFacebook)で認証を受け持ってくれる

Railsのアプリではプロバイダ先のパスワードとかを知らなくて、認証できたかどうかの結果を受け取る(もちろん、そのほかのそのサイトの情報もいろいろ受け取る)

やり方としては、ユーザーに/auth/:providerというリンクを踏んでもらい、認証結果は、/auth/:provider/callbackで受け取る

 

その後はRailsのアプリが受け持つ役割で、通常は/auth/:provider/callbackを”session#create”に渡してsessionをつくる

で、必要に応じてユーザー情報なんかを永続化したりする

session[]に入れられた情報は、current_userというメソッドをつくってログインしているか確認したり、ユーザー情報とかを引き出したり、authenticate!っていうフィルタをつくってログインしていなければアクセスできないようにしたりする

そして、logout処理でsession情報を破壊して終了する

RailsでのOmniAuthの設定

OmniAuthはプロバイダごとに独立して機能するようになっていて、omniauth-twitterとか必要なgemを入れればいい

Gemfile

bundle

OAuth情報の登録

自分のウェブアプリがOAuthを使うには、そのプロバイダにアプリの情報を事前に登録しておく

GitHubであれば、自分のアカウントの設定からApplications>Develppers Applicationsで登録する

テスト用にはhttp://localhost:3000/とかでOK

登録すればClient IDとClient Secretをもらえるので控えておく

 

OmniAuthの設定

config/initializers/omniauth.rbをつくってこんな感じで書いておく

このファイルはTwitterとかFacebookとかのときにも書き足していける

github.com/intridea/omniauth

重要な情報の隠蔽

アプリをGitHubとかに公開する場合とかこういうキーを公開するのはやばい

そこで、重要な情報は隠蔽しておく

ENVにはシェルから設定できるけどgemを使えばyamlで管理できる

github.com/laserlemon/figaro

 

これでconfig/application.ymlというファイルを作ってくれるので

サンプルみたいにyamlで書いておけばOK(コメントははずす)

なんで隠蔽されるかというとgenerateと同時にapplication.ymlは.gitignoreに登録されるので

公開するときはよくあるapplication.sample.ymlを作っておいてあげるのが親切ぽい

ほかに、database.ymlとかsecretキーとかメールホストの情報とかそういうのはここに退避しておく

*vimでyamlを保存するときにエラーが出る場合

ところで、ちょっと前からvimでyamlの保存をするときにエラーが出るようになった

どうもsyntasticがよくなかったらしい

ちょっと前にアップデートしてる

Error saving yaml files with vim

github.com/scrooloose/syntastic/issues/480

 

残りはこのとおりに作ればだいたいOK

railscasts.com/episodes/241-simple-omniauth?language=ja&view=asciicast

 

*と思ったら多少変わっていたので補足

セオリー通り、/auth/:provider/callbackをsession#createに指定して、そこでわざとエラーを起こして受け取った情報をみてみると多少構造が変わっている

 

なので、これを適当に保存するには

で、こんな感じになる

create_or_updateってどこに行ったんだろ?前は使えた気がするんだけど

create_or_update method in rails

 

簡単なアクセス制限とユーザー情報(備忘録的なメモでセキュリティ上不備があるかもしれない)

 

 

 

-Railsで使えるGem
-,

執筆者:

関連記事

ActionCableのサンプルをみてみた

By: Samantha Brough – CC BY 2.0 目次1 ActionCableとは2 rails4での利用3 redisサーバーの準備4 cableサーバーの準備5 チャッ …

Mac OSXにHyper EstraierのRuby Bindingをインストールする

By: Kanko* – CC BY 2.0 目次1 環境2 Hyper Estraierのインストール3 ソースのダウンロード4 パッチを適用する5 rvmのためにconfigureファ …

Rails3でajaxでD&Dでまとめてファイルアップロードをスクラッチで~jQueryFileUpload for Rails

参考 Rails3でajaxでD&Dでまとめてファイルアップロード~jQueryFileUpload for Rails Rails3でajaxでD&Dでまとめてファイルアップロード2 …

Railsでjavascriptやcoffeescriptをつかうとき便利かもしれないGem

By: Stan Dalone & Miran Rijavec – CC BY 2.0 目次1 oj2 gon3 js-routes4 rails-dev-tweaks oj gi …

RailsでECサイト構築7 デプロイ~spree+apache2+passenger

  前提 Rails3.2のアプリをデプロイ~apache+passenger+postgresql Rails3.2+Apache2+Passenger環境でSSLを使ってみる &nbsp …