いつもお世話になっております。
現在RailsでWebページを作成しております。
Eメールアドレスと、パスワードを入力し、POSTすると以下のような形でloginメソッドが呼ばれ、成功時にmypageにリダイレクトという流れで処理を行っています。
mypageのshowでlogged_in?メソッドを使用して、セッション情報の有無を確かめて、そのページを表示させるかをコントロールしています。
RailsサーバーをNginxをかませて
$ bundle exec pumactl start
で起動した場合
log_inメソッドで
session[:user_id] = user.id
としてsession[:user_id]に「1」という値を代入しているのですが、
リダイレクト後に、sessionの中の情報が消えてしまいます(session[:user_id]を打つとnil)。
以下コードのようにpryで止めて確認しました。
puma + Railsとして
$ sudo ~/.rbenv/shims/bundle exec rails s -b 0.0.0.0 -p 80
で起動した場合にはsessionは正しく保持されている状態です(リダイレクト後もsession[:user_id]を打つと「1」)
ruby
1 # Sessionsコントローラー 2 def login 3 user = User.find_by(email: params[:email]) 4 # ユーザーが存在し、パスワードが合っていたらログイン可 5 if user && user.authenticate(params[:password]) 6 # login処理 7 # binding.pry(この時点でsession[:user_id]するとnil) 8 log_in user 9 # binding.pry(この時点でsession[:user_id]すると「1」) 10 redirect_to controller: 'mypages', action: 'show' 11 else 12 @error_email = params[:email] 13 @error_password = params[:password] 14 @error_login = 'メールアドレスまたはパスワードが間違っています' 15 render 'logins/show' 16 end 17 end 18 19 # SessionHelper 20 def log_in(user) 21 session[:user_id] = user.id 22 end 23 24 # ユーザーがログインしていればtrue、その他ならfalseを返す 25 def logged_in? 26 !current_user.nil? 27 end 28 29 # mypagesコントローラー 30 def show 31 # binding.pry(この時点でsession[:user_id]するとnil) 32 if logged_in? 33 @user = User.find(session[:user_id]) 34 render 'mypages/show' 35 else 36 redirect_to controller: 'tops', action: 'show' 37 end 38 end 39
Nginxを使用した場合にsession情報が消えているように思えるのですが、そういったことはNginxで設定する必要があるのでしょうか。
参考になるサイトでも構いませんので、適切な方法をご教示いただけますと幸いです。
よろしくお願いいたします。
環境
Amazon Linux release 2 (Karoo)
Rails 5.2.3
Ruby version: 2.6.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。