前提
Rails-APIとReactでCRUDアプリを勉強中で、
投稿に関するコントローラー(episode_rooms_controller)内でログイン中のユーザー情報を取得するため、current_userを使用したところ、nilになってしまいました。
なんとか、ログイン中のユーザー情報を取得したいです。
よろしくお願いします。
実現したいこと
ログイン中のユーザー情報を取得したい。
該当のソースコード
sessions_controller.rb
1class SessionsController < ApplicationController 2 3 def login 4 @user = User.find_by(email: session_params[:email]) 5 if @user && @user.authenticate(session_params[:password]) 6 login! 7# ここまではsession[:user_id]はある 8 render json: { logged_in: true, user: @user } 9 else 10 render json: { status: 401, errors: ['認証に失敗しました。', '正しいメールアドレス・パスワードを入力し直すか、新規登録を行ってください。'] } 11 end 12 end 13 14 def logout 15 reset_session 16 render json: { status: 200, logged_out: true } 17 end 18 19 def logged_in? 20 if current_user 21 render json: { logged_in: true, user: @current_user } 22 else 23 render json: { logged_in: false, message: 'ユーザーが存在しません' } 24 end 25 end 26 27 private 28 def session_params 29 params.require(:user).permit(:username, :email, :password) 30 end 31end
application_controller.rb
1class ApplicationController < ActionController::Base 2 3 skip_before_action :verify_authenticity_token, raise: false 4 5 helper_method :login!, :current_user 6 7 def login! 8 session[:user_id] = @user.id 9 end 10 11 def current_user 12 @current_user ||= User.find(session[:user_id]) if session[:user_id] 13 end 14 15end
episode_rooms_controller
1class EpisodeRoomsController < ApplicationController 2 before_action :current_user 3 4 def index 5 episode_room = EpisodeRoom.all 6# ここでログイン中のユーザー情報を取得したい 7# ここでcurrent_userを使おうとしました。 8 render json: @episode_rooms 9 end 10 11 def create 12 @episode_room = EpisodeRoom.new(episode_room_params) 13 if @episode_room.save 14 render json: { status: :created, episode: @episode_room } 15 else 16 render json: { status: 500 } 17 end 18 end 19 20 private 21 22 def episode_room_params 23 params.require(:episode_room).permit(:name, :episode_id, user_ids: []) 24 end 25end
試したこと
再読み込みをしても、react内ではログイン情報は維持されており、再読み込みのたびに、sessions_controllerのlogged_inメソッドへのリクエストに対して、ログイン中のユーザー情報を取得できています。
あなたの回答
tips
プレビュー