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
-,

執筆者:

関連記事

backbone-railsのscaffoldで生成されるコードでルーティングとCRUDの処理をどうやってるのか読んでみた

By: asobi tsuchiya   目次1 はじめに2 サンプルの準備3 初期化4 ルーター5 READ6 CREATE7 UPDATE8 DELETE はじめに backbone-r …

Rails3.2でHTML5で取得した位置情報をMongoDBに保存してGoogleMapsでみる~mongoid、gmaps4rails

前提 Rails3.2でhtml5で取得した位置情報をAjaxで住所表示する~geocoder 目次1 Mongoid2 スケルトンを作る3 Gmap4railsのインストール4 とりあえず地図を表示 …

Rails3.2で位置情報を日本語表示の住所に変換する~geocoder

ついにブログ記事が100件突破した! そのうちメニュー項目などをわかりやすく構成し直したいと思う いまはRailsのプログラムが楽しくて仕方ない時期なので色々と試して書き溜めたいと思う EverNot …

FullCalendarのagendaViewでselectの場所がずれる問題

  By: Ben Piddington 前回 Rails3.2でGoogle Calendarライクなカレンダーを使う〜fullcalendar-rails   gemは最新の1 …

no image

RubyからHyper Estraierを使う1~search_do

環境:Ruby 1.9.3 & Rails 3.2.7 参考リンク github.com/grosser/search_do Getting started with acts_as_sear …