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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 6

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2653閲覧

session[user_id]を使ってログイン状態の確認をしたい

kiyomasa

総合スコア40

Ruby on Rails 6

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

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/06/22 23:46

##やりたいこと

現在バックエンドをrails -apiモード、フロントはreactでポートフォリオ を作成中です。
ログイン後に、再度ログインを保持する(current_userを確認する)機能を作成したいと思ってます。

(お手数ですが、以下sessions_contorller.rbのコード参照)

しかし、logged_in?のメソッドを実行した時に、@current_userがフロントに返されず、毎回elseの処理となってしまいます。
@current_userをフロントに返したくどのようにすればいいかお教えいただけると嬉しいです。

##試したこと
railsチュートリアルのの8章を参考に再度記述し直し・

binding.pryで以下のことを確認

application_controller.rbのメソッドは問題ない様子
createメソッドのlogin @userの後に binding.pryを置いてみたところ

def create login @user binding.pry ←ここに記載 render json: { logged_in: true, user: @user }

session[user_id]がName Errorとなってしまう。
(sessionと記述するとuser_idが入っていることは確認できた)

# [9] pry(#<Api::V1::SessionsController>)> session{user_id} # => {:user_id=>1} # [10] pry(#<Api::V1::SessionsController>)> session[user_id] # NameError: undefined local variable or method `user_id' for #<Api::V1::SessionsController:0x00000000022c18> # Did you mean? @user # from (pry):15:in `create'

sessions_contorller.rb

module Api module V1 class SessionsController < ApplicationController before_action :current_user, only: [:logged_in?] #loginでurl飛んできた後に実行するメソッド def create @user = User.find_by(email: session_params[:email]) if @user && @user.authenticate(session_params[:password]) login @user render json: { logged_in: true, user: @user } else render json: { status: 401, errors: ['正しいメールアドレス・パスワードを入力して下さい' ] ,user: @user ,session:session{user_id}} end end #logged_inでurl飛んできた後に実行するメソッド def logged_in? if @current_user render json: { logged_in: true, user: @current_user } else render json: { logged_in: false, errors: 'ユーザーが存在しません,ログインし直して下さい' } end end private def session_params params.require(:user).permit(:email, :password) end end end end

Application_controller.rb

class ApplicationController < ActionController::API include ActionController::Helpers before_action :fake_load skip_before_action :verify_authenticity_token, raise: false # Railsが認証トークンを使用しないように helper_method :login, :current_user def login(user) session[:user_id] = user.id end def current_user if session[:user_id] # @current_user ||= User.find(id: session[:user_id]) @current_user ||= User.find(session[:user_id]) end end end

routes.rb

Rails.application.routes.draw do namespace :api do namespace :v1 do root 'static_pages#home' post '/signup', to: 'users#create' post '/login',to:'sessions#create' get '/logged_in', to: 'sessions#logged_in?' delete '/logout',to:'sessions#logout' resources :users resources :recipes end end end

お手数ですが、どうすればsession[user_id]を取り出して@current_userにログイン中のuserを格納し、フロントへ返せるか教えていただけると幸いです。

##参考にしたサイト

https://qiita.com/kurawo___D/items/d5257e69bcb300908687#user%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8bcrypt%E3%81%AE%E8%A8%AD%E5%AE%9A

https://railsguides.jp/action_controller_overview.html#%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3

##環境
・ローカル環境
・ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19]
・Rails 6.1.3.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

session[user_id]を取り出し ですが
session[:user_id] だと思いますが

投稿2021/06/23 12:28

winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問