Railsではてな認証API
開発中のアプリではOpenIDを利用して認証することにしたので、手始めにはてな認証API使ってみました。
準備
1. APIキーの取得
はてな認証APIのページでAPIキーを取得して、認証を利用するアプリケーションの情報を登録。コールバックURLは、下記のように設定(localhostでも大丈夫でした)。http://localhost:3000/main/hatena_callback
2. ライブラリインストール
gem install hatenaapiauth
実装
# application.rb protected def authorize unless session[:user] flash[:notice] = "ログインしてください" redirect_to :action => "login" end end
before_filterで利用するメソッドを追加しておきます。セッションにデータがない場合は、ログインページへ。
# main_controller.rb require 'hatena/api/auth' class MainController < ApplicationController before_filter :authorize, :only => :top HATENA_PARAMS = { :api_key=>"XXXXXXXXXXXXX", :secret=>"XXXXXXXXXXXXX" } def hatena_auth Hatena::API::Auth.new(HATENA_PARAMS) end helper_method :hatena_auth def hatena_callback begin hatena_user = hatena_auth.login(params[:cert]) session[:user] = hatena_user["name"] redirect_to :action => "top" rescue Hatena::API::AuthError => e flash[:notice] = "認証に失敗しました" redirect_to :action => "login" end end def login if session[:user] != nil flash[:notice] = "認証済みです"; end end def logout session[:user] = nil redirect_to :action => "login" end def top end end
HATENA_PARAMSには、APIキーと秘密鍵を入力。hatena_callbackが、はてな認証ページからコールバックでアクセスされるメソッドです。topメソッドのみ認証をかけています。
# login.html.erb <a href="<%=hatena_auth.uri_to_login%>">はてなIDでログイン</a><br /> <%= flash[:notice] unless !flash[:notice] %>
# top.html.erb ユーザ専用コンテンツ<br /> <%= link_to "ログアウト", :action => "logout" %>
以上で、簡単な認証ページができます。
Ruby用のライブラリが公開されていたし参考になるエントリもあったので、あまり悩むことなく実装できたのですが、Rails自体の動作で分からないことが多いのでまだまだ余計なことで時間を食ってしまいます。はやくストレスなく作れるようになりたい。。