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

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

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

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

Ruby

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

リダイレクト

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

Q&A

解決済

1回答

2797閲覧

Ruby on Rails 5 で「http://localhost:3000/」にアクセスしようとすると強制的に 「http://localhost:3000/login」になります。

kazuki0714

総合スコア28

Ruby on Rails 5

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

Ruby

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

リダイレクト

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

0グッド

2クリップ

投稿2019/03/16 04:39

前提・実現したいこと

Ruby on Railsでローカル環境で学習しているのですが
どのページにアクセスしてもログインページにリダイレクトしてしまいます。

Macを使っています。

原因お分かりになる方、ぜひご教授いただきたいです。

学習は本を見て進めています。

参考書は
Ruby on Rails 5 速習実践ガイドのチャプター4の最後でこの原因に気付きました。
https://book.mynavi.jp/supportsite/detail/9784839962227.html

以上、よろしくお願いいたします。

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

http://localhost:3000/」にアクセスしようとすると強制的に
http://localhost:3000/login」になります。

他にも「http://localhost:3000/admin/users」や「http://localhost:3000/tasks」なども
http://localhost:3000/login」にリダイレクトしてします。

該当のソースコード

config/routes.rb

Rails.application.routes.draw do get '/login', to: 'sessions#new' post '/login', to: 'sessions#create' delete '/logout', to: 'sessions#destroy' namespace :admin do resources :users end root to: 'tasks#index' resources :tasks end

controllers/admin/users_controller.rb

ruby

1class Admin::UsersController < ApplicationController 2 before_action :require_admin 3 before_action :set_user, only: [:show, :edit, :update, :destroy] 4 5 def index 6 @users = User.all 7 end 8 9 def show 10 end 11 12 def new 13 @user = User.new 14 end 15 16 def edit 17 end 18 19 def create 20 @user = User.new(user_params) 21 22 if @user.save 23 redirect_to admin_user_path(@user), notice: "ユーザ「#{@user.name}」を登録しました。" 24 else 25 render :new 26 end 27 end 28 29 def update 30 if @user.update(user_params) 31 redirect_to admin_user_path(@user), notice: "ユーザ「#{@user.name}」を更新しました。" 32 else 33 render :new 34 end 35 end 36 37 def destroy 38 @user.destroy 39 redirect_to admin_users_url, notice: "ユーザ「#{@user.name}」を削除しました。" 40 end 41 42 private 43 44 def user_params 45 params.require(:user).permit(:name, :email, :admin, :password, :password_confirmation) 46 end 47 48 def set_user 49 @user = User.find(params[:id]) 50 end 51 52 def require_admin 53 redirect_to root_path unless current_user.admin? 54 end 55end 56

Application_controller.rb

ruby

1class ApplicationController < ActionController::Base 2 helper_method :current_user 3 4 private 5 6 def current_user 7 @current_user ||= User.find_by(id: session[:user_id]) if session[:user_id] 8 end 9 10 def login_required 11 redirect_to login_path unless current_user 12 end 13end 14

sessions_controller.rb

ruby

1class SessionsController < ApplicationController 2 skip_before_action :login_required 3 4 def new 5 end 6 7 def create 8 user = User.find_by(email: session_params[:email]) 9 10 if user&.authenticate(session_params[:password]) 11 session[:user_id] = user.id 12 redirect_to root_path, notice: 'ログインしました。' 13 else 14 render :new 15 end 16 end 17 18 def destroy 19 reset_session 20 redirect_to root_path, notice: 'ログアウトしました。' 21 end 22 23 private 24 25 def session_params 26 params.require(:session).permit(:email, :password) 27 end 28end 29

tasks_controller.rb

class TasksController < ApplicationController before_action :set_task, only: [:show, :edit, :update, :destroy] def index @tasks = current_user.tasks.recent end def show end def new @task = Task.new end def edit end def create @task = current_user.tasks.new(task_params) if @task.save redirect_to @task, notice: "タスク「#{@task.name}」を登録しました。" else render :new end end def update @task.update!(task_params) redirect_to tasks_url, notice: "タスク「#{@task.name}」を更新しました。" end def destroy @task.destroy redirect_to tasks_url, notice: "タスク「#{@task.name}」を削除しました。" end private def task_params params.require(:task).permit(:name, :description) end def set_task @task = current_user.tasks.find(params[:id]) end end

試したこと

require_adminが原因かなと思い、それを削除して試したり、アクションを消しては試してを繰り返しましたが原因が掴めずにいます。

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

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

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

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

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

ykp_yk

2019/03/18 22:24 編集

root to: 'tasks#index' こちらがトップページであることは間違いないですか? 間違いないようでしたらもう一度 ApplicationControllerとTasksControllerの記述がご提示されたコードと全く同じか確認してみてください。 上記同じ状況でありましたらTOPにアクセスするとログインページにリダイレクトされますでしょうか?
kazuki0714

2019/03/23 07:39

回答ありがとうございます。 ターミナルで >User.create! でユーザー作ってそれでログインすると解決しました。 お手数おかけしました。
guest

回答1

0

自己解決

自己解決しました。

ターミナルで

User.create!

でユーザー作ってからするとリダイレクトしなくなりました。

投稿2019/03/23 07:40

kazuki0714

総合スコア28

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問