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

執筆者:

関連記事

Railsでdocxをフォーマット指定でダウンロードできるようにする

タイトルだけだと何のことだかわからない railsでdocuments/2とかをGETメソッドで呼び出すとdocumentsコントローラーのshowメソッドを呼び出すようになってるんだけど、docum …

no image

Rubyでローカルで使うgemをつくる~bundler

  目次1 bundlerのインストール2 bundle gem ファイル名3 gemspec4 lib5 パッケージ化6 インストール7 使い方 bundlerのインストール gemパッケ …

no image

Rails3.2でユーザー権限を細かく設定~Devise + cancan

      参考 cancan でモテカワ♥愛され権限管理 How To: Integrate with CanCan for roles management &nbs …

ActiveRecord使い方まとめ

By: North Carolina National Guard – CC BY 2.0 ActiveRecord入門|ドットインストールをみて個人的まとめ ActiveRecord4の …

WindowsのRubyでExcelを操作~WIN32OLE

By: Môsieur J. version 9.1 – CC BY 2.0 目次1 WIN32OLE2 hello world3 Excelオブジェクトモデル4 絶対パスを取得するメソッ …