LoginSignup
14
14

More than 1 year has passed since last update.

Railsで「新規ユーザー登録後にログイン(セッション)状態にする」方法

Last updated at Posted at 2019-04-04

Webアプリケーションでは、ユーザーの新規登録時の際は自動的にログイン状態が保たれて欲しいですよね?

僕が通うプログラミングスクールのカリキュラムでは、上記のような実装はしておらず、ユーザーの新規登録時にログイン状態が保たれておらず、新たにログインし直さなければいけない仕様でした。

よりユーザービリティを向上したいと考えて、「ユーザーの新規登録時の際は自動的にログイン状態を保つ」ための実装を行ったので、整理がてら投稿いたします。

結論から申し上げますとusers_controller.rbsession[:user_id]=@user.idを追加するだけですよ!

#前提

sessions_controller.rbは下記の通りです。

loginメソッドでは、session[:user_id]にユーザーのidが保持されている状態を「ログイン状態」として定義しています。ここが重要なポイントです。

sessions_controller.rb
class SessionsController < ApplicationController
  def new
  end

  def create
    email = params[:session][:email].downcase
    password = params[:session][:password]
    if login(email, password)
      flash[:success] = 'ログインに成功しました。'
      redirect_to @user
    else
      flash.now[:danger] = 'ログインに失敗しました。'
      render 'new'
    end
  end

  def destroy
    session[:user_id] = nil
    flash[:success] = 'ログアウトしました。'
    redirect_to root_url
  end

  private

  def login(email, password)
    @user = User.find_by(email: email)
    if @user && @user.authenticate(password)
      # ログイン成功
      session[:user_id] = @user.id
      return true
    else
      # ログイン失敗
      return false
    end
  end
end

#実装

users_controller.rbsession[:user_id]=@user.idを追加します。

session[:user_id]にユーザーのidが保持されている状態が「ログイン状態」なので、session[:user_id]@user.idを代入します。

たったこれだけです。

users_controller.rb

class UsersController < ApplicationController
  before_action :require_user_logged_in, only: [:show]
  
  def show
    @user = User.find(params[:id])
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(user_params)

    if @user.save
      session[:user_id] = @user.id #ここを追加
      flash[:success] = 'ユーザを登録しました。'
      redirect_to @user
    else
      flash.now[:danger] = 'ユーザの登録に失敗しました。'
      render :new
    end
  end
  
  private

  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
  end
end

#まとめ

以上が、Railsで「新規ユーザー登録後にログイン状態にする」方法となります。

ログイン(セッション)状態についてあらためて学び直す良いきっかけとなりました。

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