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

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

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

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

Q&A

0回答

313閲覧

Railsでリダレクト後にsessionが取得できない。

mussi425

総合スコア11

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby

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

Ruby on Rails

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

リダイレクト

プログラムの入力元や出力先を通常とは別の場所に転送させることをリダイレクトと呼びます。

0グッド

0クリップ

投稿2019/11/22 07:30

学習サービス「progate」の「Ruby on Rails」のレッスンが完成し、そのコードをダウンロードして、AWSのサービス「cloud9」にアップロードして起動を試しておりました。

起動は上手くいき、tweet_appの画面を表示させることができました。
しかし、ユーザーの登録ボタンを押したり、ログインボタンを押したあと、投稿一覧画面にリダイレクトされず、ログイン画面が再び表示されてしまいます。
確認したところ、UsersControllerのcreateアクションやloginアクションでsessionにuser_idを保存しており、確かにここでは保存できているのですが、リダイレクトしたあとのApplicationControllerのset_current_userアクションにおいて、session[:user_id]がnilになっていておかしい挙動になっているようです。

ApplicationControllerのset_current_userアクションにおいて、session[:user_id]が取れるようになり、正しくリダイレクトできるように何かご教授いただけることがあれば幸いです。

  • UsersController (createアクションまたはloginアクション実行時)

Ruby

1class UsersController < ApplicationController 2 before_action :authenticate_user, {only: [:index, :show, :edit, :update]} 3 before_action :forbid_login_user, {only: [:new, :create, :login_form, :login]} 4 before_action :ensure_correct_user, {only: [:edit, :update]} 5 6 def index 7 @users = User.all 8 end 9 10 def show 11 @user = User.find_by(id: params[:id]) 12 end 13 14 def new 15 @user = User.new 16 end 17 18 def create 19 @user = User.new( 20 name: params[:name], 21 email: params[:email], 22 image_name: "default_user.jpg", 23 password: params[:password] 24 ) 25 if @user.save 26 #ここでsessionに保存してリダイレクト 27 session[:user_id] = @user.id 28 flash[:notice] = "ユーザー登録が完了しました" 29 redirect_to("/users/#{@user.id}") 30 else 31 render("users/new") 32 end 33 end 34 35 def edit 36 @user = User.find_by(id: params[:id]) 37 end 38 39 def update 40 @user = User.find_by(id: params[:id]) 41 @user.name = params[:name] 42 @user.email = params[:email] 43 44 if params[:image] 45 @user.image_name = "#{@user.id}.jpg" 46 image = params[:image] 47 File.binwrite("public/user_images/#{@user.image_name}", image.read) 48 end 49 50 if @user.save 51 flash[:notice] = "ユーザー情報を編集しました" 52 redirect_to("/users/#{@user.id}") 53 else 54 render("users/edit") 55 end 56 end 57 58 def login_form 59 end 60 61 def login 62 # メールアドレスのみを用いて、ユーザーを取得するように書き換えてください 63 @user = User.find_by(email: params[:email]) 64 # if文の条件を&&とauthenticateメソッドを用いて書き換えてください 65 if @user && @user.authenticate(params[:password]) 66 #ここでsessionに保存してリダイレクト 67 session[:user_id] = @user.id 68 flash[:notice] = "ログインしました" 69 redirect_to("/posts/index") 70 else 71 @error_message = "メールアドレスまたはパスワードが間違っています" 72 @email = params[:email] 73 @password = params[:password] 74 render("users/login_form") 75 end 76 end 77 78 def logout 79 session[:user_id] = nil 80 flash[:notice] = "ログアウトしました" 81 redirect_to("/login") 82 end 83 84 def likes 85 @user = User.find_by(id: params[:id]) 86 @likes = Like.where(user_id: @user.id) 87 end 88 89 def ensure_correct_user 90 if @current_user.id != params[:id].to_i 91 flash[:notice] = "権限がありません" 92 redirect_to("/posts/index") 93 end 94 end 95 96end 97
  • ApplicationController

Ruby

1class ApplicationController < ActionController::Base 2 before_action :set_current_user 3 4 def set_current_user 5 #ここでsession[:user_id]がnilになる 6 puts session[:user_id] 7 @current_user = User.find_by(id: session[:user_id]) 8 end 9 10 def authenticate_user 11 if @current_user == nil 12 flash[:notice] = "ログインが必要です" 13 redirect_to("/login") 14 end 15 end 16 17 def forbid_login_user 18 if @current_user 19 flash[:notice] = "すでにログインしています" 20 redirect_to("/posts/index") 21 end 22 end 23 24end 25

cloud9のRailsのバージョン:Rails 5.0.3

何か補足などが必要でしたら対応いたします。
大変お手数ですが、よろしくお願いいたします。

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問