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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

2回答

1688閲覧

ログイン画面に行きたいのにトップ画面に勝手に遷移する

tetopeg

総合スコア4

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2022/12/05 03:44

編集2022/12/05 05:25

前提

deviseをつかって認証機能をつくっています。
ログインしている状態とログアウトしている状態を確かめたく、新規登録したあとに動的ヘッダーの確認をしたかったのですが、挙動がおかしいです。
調べても情報がないため初歩的なミスをしているのかもしれません。
今まで学習を始めて2回ほどdeviseの認証機能は実装したことがあるのですが、初めてこのようなかたちで挙動がおかしくなってしまったので、どこをなおせばいいのか見当がつかないです。
追記するべき内容を教えて下されば追記します。

実現したいこと

/users/sign_inとURLを直打ちした際に、↓のログイン画面に遷移したいです
イメージ説明

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

/users/sign_inと直打ちすると勝手に↓のようにトップ画面に遷移します
イメージ説明

エラーメッセージはでないです。

Cloud9

1Started GET "/users/sign_in" for 115.36.161.203 at 2022-12-05 03:04:34 +0000 2Cannot render console from 115.36.161.203! Allowed networks: 127.0.0.0/127.255.255.255, ::1 3Processing by Devise::SessionsController#new as HTML 4 User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]] 5Redirected to https://58147239c70445eca925e032d5d67f05.vfs.cloud9.ap-northeast-1.amazonaws.com/ 6Filter chain halted as :require_no_authentication rendered or redirected 7Completed 302 Found in 8ms (ActiveRecord: 0.1ms | Allocations: 1998) 8 9 10Started GET "/" for 115.36.161.203 at 2022-12-05 03:04:34 +0000 11Cannot render console from 115.36.161.203! Allowed networks: 127.0.0.0/127.255.255.255, ::1 12Processing by HomesController#top as HTML 13 Rendering layout layouts/application.html.erb 14 Rendering homes/top.html.erb within layouts/application 15 Rendered homes/top.html.erb within layouts/application (Duration: 0.1ms | Allocations: 40) 16[Webpacker] Everything's up-to-date. Nothing to do 17 User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 1], ["LIMIT", 1]] 18 ↳ app/views/layouts/application.html.erb:15 19 Rendered layout layouts/application.html.erb (Duration: 16.4ms | Allocations: 2766) 20Completed 200 OK in 20ms (Views: 19.2ms | ActiveRecord: 0.1ms | Allocations: 3208)

該当のソースコード

routes.rb

1Rails.application.routes.draw do 2 devise_for :users 3 root to: 'homes#top' 4 get 'home/about' => 'homes#about', as: 'about' 5 6 resources :books, only:[:index, :show, :edit, :create, :update, :destroy] 7 resources :users, only:[:index, :show, :edit, :create, :update, :destroy] 8 # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html 9end

application_controller

1class ApplicationController < ActionController::Base 2 before_action :configure_permitted_parameters, if: :devise_controller? 3 4 def after_sign_in_path_for(resource) 5 user_path(resource) 6 end 7 8 def after_sign_out_path_for(resource) 9 10 root_path 11 end 12 13 protected 14 15 def configure_permitted_parameters 16 devise_parameter_sanitizer.permit(:sign_up, keys: [:name]) 17 devise_parameter_sanitizer.permit(:sign_in, keys: [:name]) 18 end 19end 20

application.html.erb

1<!DOCTYPE html> 2<html> 3 <head> 4 <title>Bookers3</title> 5 <meta name="viewport" content="width=device-width,initial-scale=1"> 6 <%= csrf_meta_tags %> 7 <%= csp_meta_tag %> 8 9 <%= stylesheet_pack_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> 10 <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> 11 </head> 12 13 <body> 14 <header> 15 <% if user_signed_in? %> 16 <li> 17 <%= link_to "ログアウト", destroy_user_session_path, method: :delete %> 18 </li> 19 <% else %> 20 <li> 21 <%= link_to "新規登録", new_user_registration_path %> 22 </li> 23 <li> 24 <%= link_to "ログイン", new_user_session_path %> 25 </li> 26 <% end %> 27 </header> 28 <%= yield %> 29 </body> 30</html> 31

↓ rails routesでパスを確認

Cloud9

1ec2-user:~/environment/bookers3 (develop) $ rails routes 2 Prefix Verb URI Pattern Controller#Action 3 new_user_session GET /users/sign_in(.:format) devise/sessions#new 4 user_session POST /users/sign_in(.:format) devise/sessions#create 5 destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy 6 new_user_password GET /users/password/new(.:format) devise/passwords#new 7 edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 8 user_password PATCH /users/password(.:format) devise/passwords#update 9 PUT /users/password(.:format) devise/passwords#update 10 POST /users/password(.:format) devise/passwords#create 11 cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel 12 new_user_registration GET /users/sign_up(.:format) devise/registrations#new 13 edit_user_registration GET /users/edit(.:format) devise/registrations#edit 14 user_registration PATCH /users(.:format) devise/registrations#update 15 PUT /users(.:format) devise/registrations#update 16 DELETE /users(.:format) devise/registrations#destroy 17 POST /users(.:format) devise/registrations#create 18 root GET / 19

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

Rails 6.1.4

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

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

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

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

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

yuma.inaura

2022/12/05 04:09

ログイン中の挙動ですか?
tetopeg

2022/12/05 04:12

ご質問ありがとうございます。おっしゃる通りでログイン中の挙動になります。新規登録をした後に、ログインしている状態を確認するためにusers/sign_in へアクセスすると、トップ画面に遷移してしまいます。
yuma.inaura

2022/12/05 05:00

>2回ほどdeviseの認証機能は実装したことがあるのですが 過去のコードを見比べてどこが違いそうでしょうか?
mather

2022/12/05 10:11 編集

resources :users, only:[:index, :show, :edit, :create, :update, :destroy] としているのに GET /users GET /users/:id が存在しないのは不自然だと思いますが、今の時点で routes.rb および rails routes の結果はどうなっていますか?
guest

回答2

0

自己解決

こちらの質問は前回したログアウト機能に関する質問とつながっていたのでそちらの問題が解決したため、この問題も同じように解決できました。ログイン認証で自分はユーザーネームとパスワードを使おうと思っていたのですが、
config/initializers/devise.rb のconfig.authentication_keys = [:email] をnameに変更することを忘れており、こちらを変更したら全て解決いたしました。
今までと同じように記述したつもりが、上記のように抜けている箇所がありました。
ご指摘いただいたyuma.inauraさま、ありがとうございました。

投稿2022/12/05 10:42

tetopeg

総合スコア4

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

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

0

ログイン中に sign_in にアクセスすると自動的にログアウト状態になり、なおかつrootにリダイレクトされてたりしないでしょうか

rb

1 def after_sign_out_path_for(resource) 2 3 root_path 4 end

投稿2022/12/05 04:27

yuma.inaura

総合スコア1453

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

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

tetopeg

2022/12/05 04:39

sign_inにアクセスしてログアウト状態になってトップ画面に遷移されることはないです。 ログアウトのリンクもつくったのですがログアウトもできないです。ログアウトしようとするとなぜかdeviseのセッションコントローラのdestroyアクションではなく、ユーザーコントローラのshowアクションが呼び出されます。
yuma.inaura

2022/12/05 04:58

rails routes でのルーティングはどうなってるんでしょうか
tetopeg

2022/12/05 05:29

見直しはしたんですけど記述内容は同じです。見落としがあるはずなんですけど分からないです。 rails routesの内容は再度更新させていただきました。
yuma.inaura

2022/12/05 05:43

今 プレーンのrailsプロジェクトにdevise入れて手元で試しましたが http://localhost:3000/users/sign_in はトップページにリダイレクトされたので devise のデフォルト挙動じゃないでしょうか
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問