1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

続・初見で難解だったdeviseを改めてまとめてみた

Posted at

#はじめに
 前回の「初見で難解だったdeviseを改めてまとめてみた」の続き。今回はログアウト機能について。
deviseの導入について説明している、前回の投稿はこちら↓
https://qiita.com/TerToEer_sho/items/b5523ad100d08126a547

##ログアウト機能の実装
 
 そもそも、ログアウトのボタンは、ログインしているユーザーにしか必要がない。
 つまり、
ログイン状態であれば、ログアウトボタンを表示させる。
 また、ログインしている状態であれば、ログアウトボタンは必要ない。
 つまり、
ログインしていない状態であれば、ログインボタンを表示させる。

 では、どのようにして、ログインしているのかどうかを判断するのか。これもまた、deviseの優れたところで、deviseのGemをインストールすると使えるメソッドがある。

user_signed_in?メソッド

 日本語訳通り、サインインしているかどうかを真偽値(true/false)で返す。

 ログインしている→true
 ログインしていない→false

 なぜ、ログインしているか判断できるのか、詳しいことはわからない。

user_signed_in?メソッドで真偽値が返ってくることを利用して、if文を用いて条件分岐させる。

つまり、

index.html.erb
<% 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メソッドが使えるからこそ、少ない作業で実装できる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?