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

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

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

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

Q&A

解決済

1回答

2750閲覧

rails httpsでアクセスするとセッションが消えてしまいログインできません

TakumaN

総合スコア120

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/02/18 10:04

編集2019/02/19 08:05

開発環境(http://www.hoge.com:3000)ではユーザーログインができるのですが、本番環境(https://www.hoge.com)ではセッションが保持されずログインできません。

httpsを使用する場合はセッションの保持に何か特別な設定が必要なのでしょうか?

https化にはlets encryptを使用しています。

コントローラは下記のような感じで、/usersへリダイレクトはされますが、セッションが保持されず、:successのフラッシュメッセージも表示されません。

rails

1 def login 2 @user = User.find_by(mail: params[:mail]) 3 if @user && @user.authenticate(params[:password]) 4 session[:user_id] = @user.id 5 flash[:success] = "ログインしました" 6 redirect_to("/users") 7 else 8 flash[:danger] = "メールアドレスまたはパスワードが間違っています" 9 @mail = params[:mail] 10 @password = params[:password] 11 render("users/new") 12 end 13 end

追記:
nginxの設定を変更して、http://www.hoge.comにするとログインできたので、原因はやはりhttpsにすることによって起こっていると考えられます!
なので、httpsの場合でもセッション情報を保持できるようにする方法を教えて頂けると助かります!
よろしくお願いします!

nginx

1# log directory 2error_log /var/www/rails/hoge/log/nginx.error.log; 3access_log /var/www/rails/hoge/log/nginx.access.log; 4# max body size 5client_max_body_size 2G; 6upstream app_server { 7 # for UNIX domain socket setups 8 server unix:/var/www/rails/hoge/tmp/sockets/.unicorn.sock fail_timeout=0; 9} 10 11 12 server { 13 listen 80; 14 listen [::]:80; 15 server_name www.hoge.com; 16 17 location / { 18 # httpでのアクセスをhttpsへのアクセスにリダイレクト 19 return 301 https://$host$request_uri; 20 } 21 22 } 23 24 server { 25 listen 443 ssl; 26 ssl on; 27 ssl_certificate /etc/letsencrypt/live/www.hoge.com/fullchain.pem; 28 ssl_certificate_key /etc/letsencrypt/live/www.hoge.com/privkey.pem; 29 30 #listen 80; 31 server_name www.hoge.com; 32 # nginx so increasing this is generally safe... 33 keepalive_timeout 5; 34 # 静的ファイルへのパス、ドキュメントルート 35 root /var/www/rails/hoge/public; 36 # ページ読み込みのキャッシュ 37 try_files $uri/index.html $uri.html $uri @app; 38 location @app { 39 # HTTPヘッダー情報 40 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 41 proxy_set_header Host $http_host; 42 proxy_redirect off; 43 proxy_pass http://app_server; 44 } 45 46 # Railsのエラーページ 47 error_page 500 502 503 504 /500.html; 48 location = /500.html { 49 root /var/www/rails/hoge/public; 50 } 51 } 52

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

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

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

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

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

guest

回答1

0

自己解決

nginxのファイル内でlocationを下記のようにすれば改善されました!
嬉しかったです!

nginx

1 location @app { 2 # HTTPヘッダー情報 3 proxy_set_header Host $host; 4 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 5 proxy_set_header X-Forwarded-Host $host; 6 proxy_set_header X-Forwarded-Server $host; 7 proxy_set_header X-Forwarded-Proto https; 8 proxy_set_header X-Real-IP $remote_addr; 9 proxy_redirect off; 10 proxy_pass http://app_server; 11 }

投稿2019/02/19 08:56

TakumaN

総合スコア120

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問