#deviseのヘルパーメソッド
メソッド | 機能 |
---|---|
current_user | 現在ログインしているユーザーのインスタンス |
user_signed_in? | ユーザーがログインしているか |
before_action :authenticate_user! | ログインしていない場合はログイン画面に遷移させる |
after_sign_out_path_for | ログアウト後のリダイレクト先を指定 |
#【current_user】
現在ログイン中のユーザーのレコードをインスタンスとして取得できるメソッドです。
モデル間でアソシエーションを組んでいる場合、子要素・親要素の取得も可能です。
current_user.name
#ユーザーの名前
current_user.tweets
#ユーザーが保持するツイートすべて
#【user_signed_in?】
ログインしている場合true
ログインしていない場合false
を返します。
<% if user_signed_in? %>
<div>
<%= link_to "ログアウト", destroy_user_session_path, method: :delete %>
</div>
<% else %>
<div>
<%= link_to "ログイン", new_user_session_path %>
<%= link_to "新規登録", new_user_registration_path %>
</div>
<% end %>
ログインしていたらログアウトボタンを、
ログインしていなかったらログインボタンと新規登録ボタンを表示させています。
#【before_action :authenticate_user!】
コントローラーの最初に記載することで、ログインユーザーのみに処理を実行させることができます。
tweets.controller.rb
class TweetsController < ApplicationController
before_action :authenticate_user!, except: [:index]
def index
end
def new
end
end
except(除く)・only(のみ)オプションがあります。
上の例だと以下2つは同じ意味です。
except: [:index]
only: [:new]
非ログインユーザーがnewアクションを実行した場合、ログイン画面に遷移します。
#【after_sign_out_path_for】
ログアウトした後にどの画面に遷移するかを指定できます。
URLでもprefixでも構いません。
application_controller
def after_sitn_out_path_for(resource)
'/users/sign_in'
end
def after_sitn_out_path_for(resource)
new_user_session_path
end
deviseログイン機能の実装方法はこちらへ >https://qiita.com/ITmanbow/items/50b8dd216d442dae21ea
ではまた!