ログイン・ログアウト機能の実装
まずはログインです。未ログインの時は/users/signin
にemailとpasswordをPOSTするフォームを表示し、ログイン中の場合は現在のユーザの名前とアイコンを表示するようにします。アイコン表示には、<img>
タグを生成するrailsのヘルパーimage_tag
を使います。同時に、レイアウトをサブカラムとメインカラムに分割してみます。 sorceryの提供するlogged_in?
とcurrent_user
を使用することで、比較的意味を汲み取りやすいコードが書けます。
見た目は以下の通りです。完成形のCSSはgithubに上げているコードを見て下さい。
さて、ルーティング定義で見たように、submitされた/users/signin
処理を受け取るのはUsersController#signin
アクションです。こちらは次のように実装します。
ここで使っているlogin
メソッドもsorceryの提供するもので、ログインが成功すればsession[:user_id]
にidが格納されるというシンプルな作りです。ログイン後の画面は以下のようになります。
同じように、sorceryのlogout
メソッドを使ってUsersController#signout
アクションにログアウト処理を実装します。
viewの方は、サブカラムにログアウトリンクを追加しておきましょう。
link_to
ヘルパーにmethod: :delete
オプションを追加することで、DELETEリクエストを送るリンクを生成できます。
ログイン・ログアウト処理が実装できたので、未ログイン状態での機能に制限をつけます。追加するロジックは
- [view] 未ログイン時はフォームを隠す
- [controlelr] ログイン時のみ投稿処理(
PostsController#create
)を許可する
のふたつです。
app/views/posts/index.html.erb
に次のif文を追加し、
PostsController#create, destroy
の前にログイン状態をチェックするフィルター「require_login
」を噛ませます。このメソッドもsorceryの提供するものです。
次のページでは、投稿データに投稿したユーザの情報を紐付けて、誰が発言したのか区別できるように表示を改良します。