40歳からのキャリアチェンジ

20代はエンジニア・PM、30代はWeb系エンジニア向けのキャリアアドバイザー。40代の今はフリーランスで開発含めて色々やってます。技術ネタとしてはRuby/RailsとJavaScript関連あたり

SinatraとOmniAuthでFacebookアカウント利用したログイン&ログアウトのサンプル

以前に人脈管理のツールを作ってると以前書いたのですが、当初は自分だけが利用できるようにしようと思っていたのですが、会社の同僚も利用できるようにすることになりました。

元々Facebookアカウントを利用しての認証の仕組みを導入は視野に入れて情報収集していて、OmniAuth Facebookが使いやすそうな印象だったのでこちらを採用しました

ログアウトの処理で少しハマる

Facebookアカウントでのログインサンプルはググると情報見つかったのですがログアウトのサンプルが見つからずにちょっとハマりました

やり方として最適なのかどうかわかりませんが、

  • ログイン成功時に、Facebookのuid の情報を、セッション変数(例:session[:uid] )に格納する
  • ログイン後に表示する画面上に、ログアウトページのリンクを貼る
  • ログアウトページに画面遷移した際に、session.clear を呼び出しsession[:uid] を空にする

という感じの処理にしてて、作ったソースはこんな↓感じです

今後の課題(というか悩み?)

自分だけではなく、他の人も利用するので、自分はRead/Write OKで、他の人は、Read のみみたいな感じのアクセス制限が必要になります。

特定のページ(というかリソース)への認可では、某女性誌に似た名前のCanCanというライブラリがあるのと、cancan でモテカワ♥愛され権限管理で知りました。

上記エントリは、Rails 向けの内容で、Sinatraからだとそのまま利用できるかどうかイマイチわからず、その後色々調べたら、Sinatra用のラッパーとしてSinatra::Canというのを見つけました

Document眺めていて、Abilities の所はすぐに理解できたのですが、Current Userの

user do
  User.find(:id => session[:id])
end

というサンプル見て、「Userって何? 」と素朴な疑問にぶち当たってます。

class User
  def find()
    #
  end
end

という感じで、自分でUserクラスを作成するのかなと思いつつ、この辺りの処理がイマイチよくわからずに悩んでます・・