#はじめに
前回の「初見で難解だったdeviseを改めてまとめてみた」の続き。今回はログアウト機能について。
deviseの導入について説明している、前回の投稿はこちら↓
https://qiita.com/TerToEer_sho/items/b5523ad100d08126a547
##ログアウト機能の実装
そもそも、ログアウトのボタンは、ログインしているユーザーにしか必要がない。
つまり、
ログイン状態であれば、ログアウトボタンを表示させる。
また、ログインしている状態であれば、ログアウトボタンは必要ない。
つまり、
ログインしていない状態であれば、ログインボタンを表示させる。
では、どのようにして、ログインしているのかどうかを判断するのか。これもまた、deviseの優れたところで、deviseのGemをインストールすると使えるメソッドがある。
user_signed_in?メソッド
日本語訳通り、サインインしているかどうかを真偽値(true/false)で返す。
ログインしている→true
ログインしていない→false
なぜ、ログインしているか判断できるのか、詳しいことはわからない。
user_signed_in?メソッドで真偽値が返ってくることを利用して、if文を用いて条件分岐させる。
つまり、
<% if user_signed_in? %>
<%= link_to 'ログアウト', destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to 'ログイン', new_user_session_path %>
<%= link_to '新規登録', new_user_registration_path %>
<% end %>
Railsのビューファイルを例にコードを書くとこんな感じになる。
気を付けるべき点は、
①ログアウトではlink_toメソッドの第三引数でHTTPメソッドを「delete」にすること。
イメージとしては、ログインしている状態を削除するといった感じ。ちなみに、「delete」にしないと、エラーが出る。理由は、link_toメソッドは、デフォルトでのHPPTメソッドが、「get」だから。link_toって読んでの通り、「リンク先に飛ばしますよ〜」という、メソッドだから。
②第二引数のパスについては、
ターミナルで、
rails routes
とコマンドを打ち、確かめる。特別な指定をしていない限りは、上記と同じで大丈夫。
##ポイント
- ログイン状態を判断するuser_signed_in?メソッドを使う。
- if文を用いて、表示を分岐させることが可能。
- ログアウトをlink_toメソッドで記述する場合、「method: :delete」が第三引数に必要。
##最後に
便利なuser_signed_inメソッドが使えるからこそ、少ない作業で実装できる。