Ruby/Rubyの基礎知識

RailsでTwitterクローンを作る(3) -- 投稿とユーザを紐付けする(3ページ目)

モデル同士の関連(association)を定義する方法、アプリケーションにユーザ認証を追加する方法、マイグレーション(migration)機能でDBスキーマに変更を加える方法などを学びます

橋本 拓也

執筆者:橋本 拓也

Rubyガイド

ログイン・ログアウト機能の実装

まずはログインです。未ログインの時は/users/signinにemailとpasswordをPOSTするフォームを表示し、ログイン中の場合は現在のユーザの名前とアイコンを表示するようにします。アイコン表示には、<img>タグを生成するrailsのヘルパーimage_tagを使います。同時に、レイアウトをサブカラムとメインカラムに分割してみます。 sorceryの提供するlogged_in?current_userを使用することで、比較的意味を汲み取りやすいコードが書けます。

見た目は以下の通りです。完成形のCSSはgithubに上げているコードを見て下さい。

login

さて、ルーティング定義で見たように、submitされた/users/signin処理を受け取るのはUsersController#signinアクションです。こちらは次のように実装します。

ここで使っているloginメソッドもsorceryの提供するもので、ログインが成功すればsession[:user_id]にidが格納されるというシンプルな作りです。ログイン後の画面は以下のようになります。

loggedin

同じように、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の提供するものです。

次のページでは、投稿データに投稿したユーザの情報を紐付けて、誰が発言したのか区別できるように表示を改良します。

  • 前のページへ
  • 1
  • 2
  • 3
  • 4
  • 次のページへ

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます