質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

355閲覧

rails-apiでログイン中のユーザー情報を取得したい

bure

総合スコア3

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

1クリップ

投稿2023/01/30 11:59

前提

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メソッドへのリクエストに対して、ログイン中のユーザー情報を取得できています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2023/01/30 23:27

どの様に ># ここでログイン中のユーザー情報を取得したい ># ここでcurrent_userを使おうとしました。 したのでしょう?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問