0
0

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.

【Ruby on Rails】sessionメソッドの使い方

Last updated at Posted at 2021-01-04

#はじめに
rails初学者のkosukeです。
railsを学習していてsessionの使い方が、あやふやになることがあるので備忘録としてまとめておきます。

#セッションとは
セッションは主にログイン機能に使用されるもので、ログイン状態を保持することができます。
セッションを保持することで、一度ログインしたらログアウトするまで登録されたユーザーとしての扱いを受けることができます。(ブラウザを閉じたりしたら、消えてしまう。)

セッションの機能がなければ、ページを移動するたびにログインをし続けなければなりません。

セッション実装する為には、ユーザーごとのブラウザに情報する必要があります。

#定義の仕方
セッションを付与するメソッドをどこかに定義しておきます。
下記コードでは、ユーザーのidに**「user_id」**という名前のセッションを付与しています。

こうすることで、ユーザーのブラウザ内に暗号化済みのユーザーidを自動で作成し、保存します。
ユーザーidをブラウザ上に保存しておくことで、ユーザー情報を保持することができます。

sessions_helper.rb
#セッションを付与するメソッド
  def log_in(user)
    session[:user_id] = user.id
  end

下記コードはログイン実装する際のアクションです。
ユーザーのパスワード認証が正しければ、ユーザーにsessionを付与するようにしています。

sessions_controller.rb
def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      log_in(user)
      redirect_to user
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

#セッションの削除方法
付与したsession[:user_id]の値をnilにするもしくは削除することで、セッションを削除することができます。

#値を「nil」にする
session[:user_id] = nil

または

#値を削除する
session.delete(:user_id)

#current_userの定義の仕方
sessionを利用して、現在ログインしているユーザーを返すことができます(いる場合)。

sessions_helper.rb
#現在ログインしているユーザーを表す。
def current_user
  if session[:user_id] #user_idというsessionを持っている場合「真」とする
    User.find_by(id: session[:user_id])
  end
end

###current_userメソッドの使い方

xxx.html.er
#現在ログインしているユーザーの名前を表示する
<%= current_user.name %>
xxx.html.er
#現在ログインしているユーザーの名前とユーザー情報に飛ぶリンクを表示する。
<%= link_to current_user.name, user_path(current_user) %>

#参考文献
rails tutorial 第8章 ログイン、ログアウト
https://railstutorial.jp/chapters/log_in_log_out?version=4.2

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?