以前に人脈管理のツールを作ってると以前書いたのですが、当初は自分だけが利用できるようにしようと思っていたのですが、会社の同僚も利用できるようにすることになりました。
元々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クラスを作成するのかなと思いつつ、この辺りの処理がイマイチよくわからずに悩んでます・・