OpenIDで認証してみた

参考:http://codezine.jp/a/article/aid/2514.aspx?p=2
砂場:http://mumoshu.com/openid/todos
ApplicationController#authorizeで、セッションがある時は認証飛ばさないと、認証されてる状態でtodos/newやってもtodos/indexに行っちゃうような。
というわけで、こう修正したら、認証済みの場合newとかできるようになった。

  def authorize
    return if session[:user_id]
    flash[:notice] = "Please log in"
    session[:jumpto] = request.parameters
    redirect_to(:controller => "/login", :action => "index")
  end

お手軽にログアウトできるように、ログイン時にlogin/logoutへのリンクを表示するようにしてみた。

# todos.html.erb
<%= yield  %>

<% if session[:user_id] %>
  <%= link_to 'Logout', { :controller => :login, :action => :logout } %>
<% end $>

</body>

同じくtodos.html.erbでエラー表示と、ログイン時の挨拶も追加してみた。

<body>

<p style="color: green"><%= flash[:notice] %></p>

<p style="color: red"><%= flash[:error] %></p>

<% if session[:user_id] %>
  <p style="color: blue"><%= "Hi, #{session[:user_id].identity_url}!" %></p>
<% end %>

<%= yield  %>