メソッド | 用途 |
---|---|
before_action :authenticate_user! | コントローラーに設定して、ログイン済ユーザーのみにアクセスを許可する |
user_signed_in? | ユーザーがサインイン済かどうかを判定する |
current_user | サインインしているユーザーを取得する |
user_session | ユーザーのセッション情報にアクセスする |
※モデル名にUser以外を使用している場合、それぞれのメソッドの『user』部分を書き換えます。
以下に各メソッドの補足を書いていきます。
before_action :authenticate_user!
コントローラーの先頭に記載することで、そこで行われる処理はログインユーザーによってのみ実行可能となります。
下記の通り記載した場合、記事の一覧、詳細を確認することができるのはログインユーザーのみとなります。
class ArticlesController < ApplicationController
before_action :authenticate_user!
def index
end
def show
end
end
下記のように記載し、一覧(index)は未ログインユーザーでも実行可能・詳細(show)はログインユーザーのみ実行可能とすることも可能です。
class ArticlesController < ApplicationController
before_action :authenticate_user!, only: [:show]
def index
end
def show
end
end
user_signed_in?
before_action :authenticate_user!よりも細かい分岐でログイン/未ログインの処理を分岐することができます。
コントローラー、ビュー問わず使用できます。
class ArticlesController < ApplicationController
before_action :authenticate_user!, only: [:show]
def index
flash[:notice] = "ログイン済ユーザーのみ記事の詳細を確認できます" unless user_signed_in?
end
def show
end
end
...
<body>
...
<% if user_signed_in? %>
<%= render 'layouts/login_user_header' %>
<% else %>
<%= render 'layouts/no_login_user_header' %>
<% end %>
...
</body>
...
current_user
現在ログインしているユーザーをモデルオブジェクトとして利用できます。
関連付けがされている場合、子要素・親要素の取得などが可能です。
class ArticlesController < ApplicationController
before_action :authenticate_user!, only: [:show,:new]
def index
flash[:notice] = "ログイン済ユーザーのみ記事の詳細を確認できます" unless user_signed_in?
end
def show
end
def new
@article= current_user.articles.build
end
end
ユーザーのメールアドレスを表示したい場合
<div>あなたのメールアドレス:<%= current_user.email %></div>
user_session
ユーザーのセッション情報を設定・取得することができます。
class ArticlesController < ApplicationController
...
def index
user_session[:cart] = "Cart"
respond_with(current_user)
end
...
def expire
user_session['last_request_at'] = 31.minutes.ago.utc
...
end
...
end