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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Ruby on Rails 5

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

Devise

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

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Ruby on Rails

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

受付中

(old)Railsログにログイン中のユーザIDを表示させたい

otdsh9432
otdsh9432

総合スコア54

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Ruby on Rails 5

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

Devise

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

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Ruby on Rails

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

0回答

0リアクション

1クリップ

255閲覧

投稿2022/07/12 00:59

編集2022/09/02 09:04

※起票してから暫く下書き状態で放置してしまっていたため、
同じ内容で新規に質問を起票し直しました。→https://teratail.com/questions/e06e2q46qfp1vb
(もし別質問にて進展がありましたらこちらへも随時反映いたします。申し訳ありません)

前提

Ruby on Rails(v5.2.5)でWebアプリケーションを開発・運用しています。
ログインの仕組みはdevise gemを利用し、
userモデル(団体会員)とpersonモデル(個人会員)をそれぞれログインユーザ方法を保持するモデルとして定義しています。
session情報の保存(session_store)にはRedis(ElastiCache for Redis)を使っています。
(Redisはキャッシュの保存やsidekiqのキューとしても利用しています)

実現したいこと

Railsログ(production.log)にログイン中のユーザのIDも表示させたいです。
現在、以下のようにリクエストIDなどは表示している状態です。
ログイン中のユーザが存在する場合はここに追加したいです。

I, [2022-07-12T07:37:12.020791 #1] INFO -- : [i5ab0ff7-9a01-9995-hf9a-i51fduu107p0] Rendered articles/show.html.erb within layouts/application (4574.8ms)
  • config/environments/production.rb の状態(抜粋)
config.logger.formatter = ::Logger::Formatter.new config.log_tags = [ :request_id ]

発生している問題・エラーメッセージ

ネット検索で見当たった以下の方法を試してみましたが、
それぞれ上手くいかない状態です、、

1. Rails.application.config.session_options を使用(参考サイト
⇛結果:何も出力されない

ruby

config.log_tags = [ :request_id, ->(req) { session_key = (Rails.application.config.session_options || {})[:key] session_data = req.cookie_jar.encrypted[session_key] || {} users = [] %w(user person).each do |scope| user_id = session_data.dig("warden.user.#{scope}.key", 0, 0) users << "#{scope}:#{user_id}" if user_id end users.join(',') } ]

pry-byebugで途中で止めてそれぞれの変数の中身を確認したところ、
session_key にはRedisのサーバ情報しか格納されておらず、 session_data には何も格納されていなかったため、
ログイン中のユーザで操作を行っても、戻り値はnilになる状態でした。

2.セッションストアからセッション情報を抽出する方法(参考サイト
⇛結果:何も出力されない

config.log_tags = [ :request_id, ->(req) { Redis.current = Redis.new(host: Settings.redis.host, port: "6379") Redis.current.keys('session:*').select {|key| user_hash = Marshal.load(Redis.current.get(key)) } } ]

※そもそも、 Redis.current.keys('session:*') は大量に存在するため、どれが今のセッションか特定できない。
今のセッションがどれなのか特定する方法が不明

試したこと

「発生している問題・エラーメッセージ」に記載した通りとなります。

補足情報(FW/ツールのバージョンなど)

ruby 2.6.6
Rails 5.2.5

お手数をお掛けしますが、何か「これっぽいのでは?」という情報だけでも示唆いただけると大変ありがたいです。
また、不足情報等ございましたら、恐れ入りますがご指摘いただけますと幸いです。
どうぞよろしくお願いいたします。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Ruby on Rails 5

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

Devise

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

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Ruby on Rails

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